熊猫groupby并添加新列

最高

我正在尝试过滤具有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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章