我正在寻找一个pandas等价于数据帧的resample
方法,它不是一个DatetimeIndex
,而是一个整数数组,甚至可能是浮点数。
我知道,在某些情况下(例如,this one),重采样方法可以很容易地被重新索引和插值替换,但在某些情况下(我认为)不能
例如,如果我有
df = pd.DataFrame(np.random.randn(10,2))
withdates = df.set_index(pd.date_range('2012-01-01', periods=10))
withdates.resample('5D', np.std)
这给了我
0 1
2012-01-01 1.184582 0.492113
2012-01-06 0.533134 0.982562
但是我不能用df
和重采样产生相同的结果。所以我要找的东西
df.resample(5, np.std)
那会让我
0 1
0 1.184582 0.492113
5 0.533134 0.982562
这种方法存在吗?我能够创建这个方法的唯一方法是手动将df
分离成更小的数据帧,应用np.std
,然后将所有内容连接回去,我发现这非常慢,一点也不聪明。
干杯
@piSquared解决方案真的很好,但我不喜欢在重新编制索引时按手挑选索引。
这也适用于每种下采样(浮动索引也适用),并自动选取每个范围内索引的平均值:
现在您可以随意选择要在每个子组中计算的函数:
编辑:索引中有一些错误,现在可以正常工作了。
另外,这是一件可以做的事
设置
您需要自己创建要分组的标签。我会用:
要获得一系列的值,比如
[0, 0, 0, 0, 0, 1, 1, 1, 1, 1, ...]
,那么在groupby
中使用这个您还需要指定新数据帧的索引。我会用:
从第5个位置(因此是
4
)开始,然后每隔5个位置获取一个当前索引。它看起来像[4, 9, 14, 19]
。我本来可以做df.index[::5]
来获得起始位置,但我选择了结束位置。溶液
看起来像:
其他注意事项
这相当于下采样。我们还没有解决抽样问题。
要通过更频繁的操作返回到数据帧索引,可以使用
reindex
,如下所示:看起来像:
我们还可以使用其他东西来
reindex
,比如range(0, 20, 2)
来将样本提升到偶数整数索引。相关问题 更多 >
编程相关推荐