我想对一列中的特定行求和,并仅使用汇总值创建一个新的数据框。 例如,原始帧看起来像(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
.
.
.
如何最有效地编写此练习代码?
非常感谢您的帮助!
答案 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的值均在最后一小时之内...