1

resampling and appending to same dataframe

I have a dataframe which I want to resample and append the results to original dataframe as new column,

What I have:

index = pd.date_range('1/1/2000', periods=9, freq='T')
series = pd.Series(range(9), index=index)
series

time                 value      
2000-01-01 00:00:00    0
2000-01-01 00:01:00    1
2000-01-01 00:02:00    2
2000-01-01 00:03:00    3
2000-01-01 00:04:00    4
2000-01-01 00:05:00    5
2000-01-01 00:06:00    6
2000-01-01 00:07:00    7
2000-01-01 00:08:00    8

What I want:

time                 value   mean_resampled
2000-01-01 00:00:00    0.         2
2000-01-01 00:01:00    1.         NaN
2000-01-01 00:02:00    2.         NaN
2000-01-01 00:03:00    3.         NaN
2000-01-01 00:04:00    4.         NaN         
2000-01-01 00:05:00    5.         6.5
2000-01-01 00:06:00    6.         NaN
2000-01-01 00:07:00    7.         NaN
2000-01-01 00:08:00    8.         NaN

Note: resampling frequency is '5T'

Submitted September 10th 2021 by Admin

Answers
0

index = pd.date_range('1/1/2000', periods=9, freq='T')
series = pd.Series(range(9), index=index, name='values') sample = series.resample('5T').mean() # create a sample at some frequency
df = series.to_frame() # convert series to frame
df.loc[sample.index.values, 'mean_resampled'] = sample # use loc to assign new values values mean_resampled
2000-01-01 00:00:00 0 2.0
2000-01-01 00:01:00 1 NaN
2000-01-01 00:02:00 2 NaN
2000-01-01 00:03:00 3 NaN
2000-01-01 00:04:00 4 NaN
2000-01-01 00:05:00 5 6.5
2000-01-01 00:06:00 6 NaN
2000-01-01 00:07:00 7 NaN
2000-01-01 00:08:00 8 NaN

Admin | 1 month ago


0

Use resample to compute the mean and concat to merge your Series with new values.

>>> pd.concat([series, series.resample('5T').mean()], axis=1) \ .rename(columns={0: 'value', 1: 'mean_resampled'}) value mean_resampled
2000-01-01 00:00:00 0 2.0
2000-01-01 00:01:00 1 NaN
2000-01-01 00:02:00 2 NaN
2000-01-01 00:03:00 3 NaN
2000-01-01 00:04:00 4 NaN
2000-01-01 00:05:00 5 6.5
2000-01-01 00:06:00 6 NaN
2000-01-01 00:07:00 7 NaN
2000-01-01 00:08:00 8 NaN

If you have a DataFrame instead of Series in your real case, you have just to add a new column:

>>> df['mean_resampled'] = df.resample('5T').mean()

Admin | 1 month ago



Relevant Questions