重新采样并附加到相同的数据帧

Posted

技术标签:

【中文标题】重新采样并附加到相同的数据帧【英文标题】:resampling and appending to same dataframe 【发布时间】:2021-11-07 05:59:00 【问题描述】:

我有一个数据框,我想对其重新采样并将结果作为新列附加到原始数据框,

我有什么:

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

我想要什么:

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

注意:重采样频率为'5T'

【问题讨论】:

重采样的频率是多少? 刚刚修改了问题:) 现在好多了 :) 现在答案就是你所期望的 :) 【参考方案1】:

使用resample 计算平均值,使用concatSeries 与新值合并。

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

如果您的实际情况是DataFrame 而不是Series,您只需添加一个新列:

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

【讨论】:

【参考方案2】:
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

【讨论】:

以上是关于重新采样并附加到相同的数据帧的主要内容,如果未能解决你的问题,请参考以下文章

在另一个单独的数据帧中使用一个数据帧中的 id 抓取数据,该数据帧不具有相同的列名并将字符串附加到一个值

SQL Server LocalDB:将数据库分离并重新附加到同一台计算机(机器,相同路径)后,无法备份数据库

有效地附加到 pandas 数据帧

附加两个具有相同列,不同顺序的数据帧

将 Pandas 数据帧随时间附加到 SQLite3 数据库并返回

Apache Spark 如何将新列从列表/数组附加到 Spark 数据帧