Python pandas数据框,逐行汇总直到停止条件

时间:2019-01-30 10:36:58

标签: python pandas dataframe grouping

我想对一列中的特定行求和,并仅使用汇总值创建一个新的数据框。 例如,原始帧看起来像(A = ID,B =基准[yyyymmdd],C =小时+分钟[hhmm],D =值)

    A         B     C    D
11035  20190101  0010  1.1
11035  20190101  0020  1.9
11035  20190101  0030  3.3
11035  20190101  0040  1.0
11035  20190101  0050  2.9
11035  20190101  0100  0.5
11001  20190109  0110  0.0
11001  20190109  0120  0.2
11001  20190109  0130  1.5
11001  20190109  0140  1.2
11001  20190109  0150  1.9
11001  20190109  0200  4.5
.
.
.

最终数据帧应仅包括整小时的行(即0100、0200等),但值应包含前6个值的总和(例如,对于0100:0010至0100的总和)。 上面示例的输出数据框应如下所示:

    A         B     C     D
11035  20190101  0100  10.7
11001  20190109  0200   9.3
.
.
.

如何最有效地编写此练习代码?

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

@roganjosh建议的更好的方法-谢谢

pieceOfData

在答案中对每个问题进行编辑

df_new=df.groupby(['A','B']).agg({'C': 'max', 'D': 'sum'}).reset_index().sort_values('C')
print(df_new)

    A         B     C     D
11035  20190101  0100  10.7
11001  20190109  0200   9.3

答案 1 :(得分:0)

它适用于示例给出的行,但是对于较大的数据集,它似乎无法正常工作: 例如,如果框架是:

    A         B     C    D
11035  20190101  0010  1.1
11035  20190101  0020  1.9
11035  20190101  0030  3.3
11035  20190101  0040  1.0
11035  20190101  0050  2.9
11035  20190101  0100  0.5
11035  20190101  0110  1.1
11035  20190101  0120  1.9
11035  20190101  0130  0.3
11035  20190101  0140  1.0
11035  20190101  0150  2.9
11035  20190101  0200  0.5
11001  20190109  0110  0.0
11001  20190109  0120  0.2
11001  20190109  0130  1.5
11001  20190109  0140  1.2
11001  20190109  0150  1.9
11001  20190109  0200  4.5

然后我的输出是:

       A         B    C     D
0  11001  20190109  200   9.3
1  11035  20190101  200  18.4

但是应该是:

       A         B    C     D
0  11035  20190101  100  10.7
1  11035  20190101  200   7.7
2  11001  20190109  200   9.3

因此,groupby-条件应扩展到C列,其中C的值均在最后一小时之内...