Python 如何在DataFrame中找到最大值并返回结果DataFrame
我有一个部分看起来像这样的数据框:Python 如何在DataFrame中找到最大值并返回结果DataFrame,python,dataframe,Python,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
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
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
现在我需要为每个Qtot创建另一个最大值为Ptot的数据帧,如下所示:
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
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
我想这应该很容易做到,但是我被卡住了。您可以尝试使用
.groupby
方法。它的工作原理与sql中的groupby类似,并返回一个数据帧。分组后,您可以为组定义操作。对于
Ptot
(根据您的需要)有max
操作,您可以为其他操作返回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\u G1
列是max
而不是mean
,您可以用'mean'
替换'max'
常见的聚合函数包括
sum
,max
,min
,mean
,size
和first
。可以在中找到完整列表。您可以尝试使用.groupby
方法。它的工作原理与sql中的groupby类似,并返回一个数据帧。分组后,您可以为组定义操作。对于
Ptot
(根据您的需要)有max
操作,您可以为其他操作返回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\u G1
列是max
而不是mean
,您可以用'mean'
替换'max'
常见的聚合函数包括
sum
,max
,min
,mean
,size
和first
。完整的列表可以在您在这里尝试了什么?df.groupby('Qtot',as_index=False)。max()中找到。df.groupby('Qtot',as_index=False)。max()您在这里尝试了什么?