python - Pandas 中每组的重新采样聚合

标签 python pandas

考虑如下数据框

             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 汇总AB

对于每个 ID 和每隔 X 天,结果应该只是 AB 的一个值。

例如,在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/

相关文章:

python - Pandas 数据框中所有系列的唯一值计数的总和

pandas - 对 pandas 的多索引 DataFrame 进行切片

python - 不支持使用 Blaze Data(engine) 的字符串编码

Python:WAITING按键或直到超时

python - 如何从另一个文件调用函数?

python - pandas read_csv 将列转换为 int 类型

python - Pandas 模式匹配添加文本

python - 为什么optimal_count没有给出正确的结果?

python - 将部分属性传递到 Beautiful Soup findall 函数

python - 如何注释箱线图的中位数、四分位数和须线