考虑如下数据框
ID A B date
0 0C0003fi8E 6 10 2015-04-01
1 0C0AD3fi4S 10 15 2015-04-01
2 0C0AD3flmn 60 22 2015-04-01
3 0C0003fi8E 10 40 2015-04-02
4 0C0AD3fi4S 8 15 2015-04-02
5 0CaAD3flmn 33 18 2015-04-02
6 0C0003fi8E 10 19 2015-04-03
7 0C0AD3fi4S 8 25 2015-04-03
8 0CaAD3flmn 33 20 2015-04-03
9 0C0003fi8E 75 11 2015-04-04
10 0C0AD3fi4S 4 37 2015-04-04
11 0CaAD3flmn 28 80 2015-04-04
...
我需要每连续两天为每个 ID 汇总A
和B
。
对于每个 ID
和每隔 X 天,结果应该只是 A
和 B
的一个值。
例如,在ID
上使用每两天的采样频率:
ID A B date
0C0003fi8E 16 50 2015-04-01
0C0AD3fi4S 18 30 2015-04-01
0C0AD3flmn 93 40 2015-04-01
0C0003fi8E 95 30 2015-04-03
0C0AD3fi4S 12 52 2015-04-03
0CaAD3flmn 61 100 2015-04-03
我如何在 Pandas 中执行此操作?
如果我想使用更灵活的时间段进行重新采样怎么办?例如。每周,还是每月?可以resample
用于此?
最佳答案
如果将日期设置为索引,则可以使用 TimeGrouper:
In [11]: df1.groupby(["ID", pd.TimeGrouper("d")]).sum()
Out[11]:
A B
ID date
0C0003fi8E 2015-04-01 6 10
2015-04-02 10 40
2015-04-03 10 19
2015-04-04 75 11
0C0AD3fi4S 2015-04-01 10 15
2015-04-02 8 15
2015-04-03 8 25
2015-04-04 4 37
0C0AD3flmn 2015-04-01 60 22
0CaAD3flmn 2015-04-02 33 18
2015-04-03 33 20
2015-04-04 28 80
In [12]: df1.groupby(["ID", pd.TimeGrouper("2d")]).sum()
Out[12]:
A B
ID date
0C0003fi8E 2015-04-01 16 50
2015-04-03 85 30
0C0AD3fi4S 2015-04-01 18 30
2015-04-03 12 62
0C0AD3flmn 2015-04-01 60 22
0CaAD3flmn 2015-04-01 33 18
2015-04-03 61 100
注意:如有必要,您可以reset_index
来改变索引列。
这在文档中没有明确说明,但是 several examples in the cookbook .
关于python - Pandas 中每组的重新采样聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33662514/