gpt4 book ai didi

python - 通过任意因子重新采样 Pandas 数据框

转载 作者:太空宇宙 更新时间:2023-11-04 10:42:13 28 4
gpt4 key购买 nike

如果您的索引使用日期时间索引,Pandas 重采样真的很方便,但我还没有找到一个简单的实现来按任意因子重采样。例如,只需将每个索引视为一个任意索引,并对数据帧重新采样,使其结果长度缩短 4 倍(并且比仅取每 4 个数据点更智能)。

这对于处理在比日期时间短得多的时间尺度上运行的数据的任何人都非常有用。例如,在我的例子中,我想将音频矢量从 44KHz 重新采样到 11KHz。现在我必须使用 scipy 的“抽取”功能,然后将其重新转换回数据帧(使用 dataframe.apply 不起作用,因为它改变了数据帧的长度)。

有人对如何完成此任务有任何建议吗?

最佳答案

您可以使用 DatetimeIndex 对高频数据重新采样(精确到纳秒,警告:我相信这仅在即将发布的 0.13 版本中可用)。我已经成功地使用 pandas 对 24KHz 范围内的电生理数据进行了重新采样。这是一个例子:

In [97]: index = date_range('1/1/2001 00:00:00', '1/1/2001 00:00:01', freq='22727N')

In [98]: index
Out[98]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2001-01-01 00:00:00, ..., 2001-01-01 00:00:00.999988]
Length: 44001, Freq: 22727N, Timezone: None

In [99]: s = Series(randn(index.size), index=index)

In [100]: s.head(10)
Out[100]:
2001-01-01 00:00:00 -0.820
2001-01-01 00:00:00.000022 -1.141
2001-01-01 00:00:00.000045 1.577
2001-01-01 00:00:00.000068 -1.031
2001-01-01 00:00:00.000090 0.343
2001-01-01 00:00:00.000113 -0.424
2001-01-01 00:00:00.000136 -0.753
2001-01-01 00:00:00.000159 0.411
2001-01-01 00:00:00.000181 0.238
2001-01-01 00:00:00.000204 1.048
Freq: 22727N, dtype: float64

In [101]: s.resample(s.index.freq * 4, how='mean')
Out[101]:
2001-01-01 00:00:00 -0.354
2001-01-01 00:00:00.000090 -0.106
2001-01-01 00:00:00.000181 0.245
2001-01-01 00:00:00.000272 0.568
2001-01-01 00:00:00.000363 0.047
2001-01-01 00:00:00.000454 -0.560
2001-01-01 00:00:00.000545 -0.485
2001-01-01 00:00:00.000636 -0.271
2001-01-01 00:00:00.000727 -0.457
2001-01-01 00:00:00.000818 0.078
2001-01-01 00:00:00.000909 0.394
2001-01-01 00:00:00.000999 0.185
2001-01-01 00:00:00.001090 -0.441
2001-01-01 00:00:00.001181 0.300
2001-01-01 00:00:00.001272 -0.521
...
2001-01-01 00:00:00.998715 -0.045
2001-01-01 00:00:00.998806 -0.044
2001-01-01 00:00:00.998897 0.090
2001-01-01 00:00:00.998988 0.748
2001-01-01 00:00:00.999078 -0.179
2001-01-01 00:00:00.999169 0.451
2001-01-01 00:00:00.999260 -1.041
2001-01-01 00:00:00.999351 -0.476
2001-01-01 00:00:00.999442 -0.234
2001-01-01 00:00:00.999533 -0.719
2001-01-01 00:00:00.999624 -0.606
2001-01-01 00:00:00.999715 -0.032
2001-01-01 00:00:00.999806 -0.296
2001-01-01 00:00:00.999897 -0.044
2001-01-01 00:00:00.999988 -0.951
Freq: 90908N, Length: 11001

您可以将一个可调用对象传递给how,这样您就可以“做一些更智能的事情”。 pandas 默认取给定时间段内的平均值(在本例中,这是 22727 个样本的每个 block 的平均值)。

关于python - 通过任意因子重新采样 Pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19896103/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com