如何对每行时间前1小时到后1小时的价格进行汇总,Pandas

时间:2019-02-27 15:25:01

标签: python pandas

我有一个熊猫数据框,如下所示:

  id price hour minute  date
  1  10    03   07      01/11
  2  4     03   59      01/11
  3  5     02   21      01/11
  4  6     03   47      02/09
  5  1     04   28      02/04
  6  7    05   50      01/11
  7  3     02   01      01/11
  8  2     01   23      01/11
  ...

我想要一个输出,如:

  id price hour minute  date   cumprice
  1  10    03   07      01/11  19
  2  4     03   59      01/11  14
  3  5     02   21      01/11  20
  4  6     03   47      02/09  6
  5  1     04   28      02/04  1
  6  7     05   50      01/11  7
  7  3     02   01      01/11  10
  8  2     01   23      01/11  10
  ...

我不知道要快完成这项工作。 任何人都可以帮助我,快速做到这一点?

1 个答案:

答案 0 :(得分:3)

您可以groupby date并使用transform添加一列,其中包含每组价格的sum

df['cumsprice'] = df.groupby('date').price.transform('sum')

   id  price  hour  minute   date  cumsprice
0   1     10     3       7  01/11         19
1   2      4     3      59  01/11         19
2   3      5     2      21  01/11         19
3   4      6     3      47  02/09          6
4   5      1     4      28  02/04          1

更新

在更改预期的解决方案后进行更新。为了对相等的连续日期进行分组,您可以通过检查日期更改在哪些行上并采用其中的cumsum来创建自定义分组器:

g = df.date.ne(df.date.shift(1))
df['cumprice'] = df.groupby(g.cumsum()).price.transform('sum')    

print(df)
   id  price  hour  minute   date  cumsprice  cumprice
0   1     10     3       7  01/11         31      19.0
1   2      4     3      59  01/11         31      19.0
2   3      5     2      21  01/11         31      19.0
3   4      6     3      47  02/09          6       6.0
4   5      1     4      28  02/04          1       1.0
5   6     12     5      50  01/11         31      12.0