我有一个看起来像这样的DataFrame:
df_all_q
Out[43]:
Qtot Ptot Q_G1 Q_G2 P_G1 P_G2
0 0.0 0.000000 0.0 0.0 0.000000 0.000000
1 5.0 0.576190 0.0 5.0 0.000000 0.576190
2 5.0 0.581900 5.0 0.0 0.581900 0.000000
3 10.0 1.152380 0.0 10.0 0.000000 1.152380
4 10.0 1.163800 10.0 0.0 1.163800 0.000000
5 10.0 1.158090 5.0 5.0 0.581900 0.576190
6 15.0 1.805147 15.0 0.0 1.805147 0.000000
7 15.0 1.734280 5.0 10.0 0.581900 1.152380
8 15.0 1.739990 10.0 5.0 1.163800 0.576190
9 15.0 1.569220 0.0 15.0 0.000000 1.569220
10 20.0 2.381337 15.0 5.0 1.805147 0.576190
11 20.0 2.151120 5.0 15.0 0.581900 1.569220
12 20.0 2.466860 20.0 0.0 2.466860 0.000000
13 20.0 1.782640 0.0 20.0 0.000000 1.782640
14 20.0 2.316180 10.0 10.0 1.163800 1.152380
15 25.0 2.713030 0.0 25.0 0.000000 2.713030
16 25.0 2.364540 5.0 20.0 0.581900 1.782640
17 25.0 3.043050 20.0 5.0 2.466860 0.576190
18 25.0 3.111990 25.0 0.0 3.111990 0.000000
19 25.0 2.957527 15.0 10.0 1.805147 1.152380
20 25.0 2.733020 10.0 15.0 1.163800 1.569220
现在,我需要为每个Qtot创建另一个具有最大Ptot值的DataFrame,如下所示:
df_result
Out[45]:
Qtot Ptot Q_G1 Q_G2 P_G1 P_G2
0 0.0 0.000000 0.0 0.0 0.000000 0.0
2 5.0 0.581900 5.0 0.0 0.581900 0.0
4 10.0 1.163800 10.0 0.0 1.163800 0.0
6 15.0 1.805147 15.0 0.0 1.805147 0.0
12 20.0 2.466860 20.0 0.0 2.466860 0.0
18 25.0 3.111990 25.0 0.0 3.111990 0.0
我想这应该很容易实现,但是我被困住了。
答案 0 :(得分:0)
您可以尝试使用.groupby
方法。它在SQL中的工作原理与groupby
类似,并返回一个数据帧。
分组后,您可以对组定义操作。 max
有Ptot
操作(如您所愿),您可以为其他返回mean
。
另一种选择是仅返回Ptot
列,然后将结果数据框与旧数据框合并。
df_all_q.groupby('Qtot').agg({'Ptot': 'max', 'Q_G1': 'mean',
'Q_G2': 'mean', 'P_G1': 'mean', 'P_G2': 'mean'}).reset_index()
所以,按部分:
.groupby
将所有具有相同值的Qtot分组
.add
设置每列的汇总功能
.reset_index
使Qtot
成为普通列,而不是新数据帧的索引
例如,如果您希望结果上的P_G1
列是max
而不是mean
,则可以将'max'
替换为{{1} }。
常见的聚合函数包括'mean'
,sum
,max
,min
,mean
和size
。完整列表可在docs