如何在DataFrame中找到最大值并返回结果DataFrame

时间:2019-04-08 20:59:48

标签: python dataframe

我有一个看起来像这样的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

我想这应该很容易实现,但是我被困住了。

1 个答案:

答案 0 :(得分:0)

您可以尝试使用.groupby方法。它在SQL中的工作原理与groupby类似,并返回一个数据帧。
分组后,您可以对组定义操作。 maxPtot操作(如您所愿),您可以为其他返回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'summaxminmeansize。完整列表可在docs

中找到