假设我有一个如下所示的数据框(我将仅使用一个简单示例):
import pandas as pd
df = {'Col1':[3,4,2,6,5,7,3,4,9,7,1,3],
'Col2':['B','B','B','B','A','A','A','A','C','C','C','C',],
'Col3':[1,1,2,2,1,1,2,2,1,1,2,2]}
df = pd.DataFrame(df)
它给出了这样一个数据框:
Col1 Col2 Col3
0 3 B 1
1 4 B 1
2 2 B 2
3 6 B 2
4 5 A 1
5 7 A 1
6 3 A 2
7 4 A 2
8 9 C 1
9 7 C 1
10 1 C 2
11 3 C 2
我要做的是几个步骤:
1) 对于 Col2 中的每个唯一值,以及 Col3 中的每个唯一值,平均 Col1。所以期望的输出是:
Avg Col2 Col3
1 3.5 B 1
2 4 B 2
3 6 A 1
4 3.5 A 2
5 8 C 1
6 2 C 2
2) 现在,对于 Col3 中的每个唯一值,我想要 Col2 中的最高平均值和对应值。所以
Best Avg Col2 Col3
1 8 C 1
2 4 B 2
我一直在尝试使用 df.groupby(['Col3','Col2'], as_index = False).agg({'Col1':'mean'}).groupby(['Col3'] ).agg({'Col1':'max'})
这为我提供了每个 Col3 值的最高平均值,但不是相应的 Col2 标签。感谢您提供的任何帮助!
最佳答案
在你第一次 groupby
之后做 sort_values
+ drop_duplicates
g1=df.groupby(['Col3','Col2'], as_index = False).agg({'Col1':'mean'})
g1.sort_values('Col1').drop_duplicates('Col3',keep='last')
Out[569]:
Col3 Col2 Col1
4 2 B 4.0
2 1 C 8.0
或者如果你有重复的均值最大值
g1[g1.Col1==g1.groupby('Col3').Col1.transform('max')]
关于python - 在 groupby 内分组,然后取平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54813305/