Phoenix
Phoenix

Reputation: 399

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'

Upvotes: 0

Views: 599

Answers (2)

Corralien
Corralien

Reputation: 120409

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()

Upvotes: 1

It_is_Chris
It_is_Chris

Reputation: 14103

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

Upvotes: 1

Related Questions