我正在尝试过滤具有3列的数据框,而我想做的是:按col1和col2分组并获得col3的最大值,还获得col3的第二个最大值,但将其插入为新列:col 4
我可以使用以下内容将其分组,但不知道如何获取第二个最大值并将其插入另一列:
grouped = df.groupby(['COL1', 'COL2']).agg({'COL3': 'max'})
COL1 COL2 COL3
0 A 1 0.2
1 A 1 0.4
3 B 4 0.7
想要的输出:
COL1 COL2 COL3 COL4
0 A 1 0.4 0.2
3 B 4 0.7 0.7
您可以使用.nlargest
。以下解决方案利用了以下事实:Series
构造函数将广播值以匹配索引的形状。
df.groupby(['COL1', 'COL2'])['COL3'].apply(
lambda s: pd.Series(s.nlargest(2).values, index=['COL3', 'COL4'])
).unstack()
退货
COL3 COL4
COL1 COL2
A 1 0.4 0.2
B 4 0.7 0.7
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句