我试图过滤一个有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
Run Code Online (Sandbox Code Playgroud)
通缉输出:
COL1 COL2 COL3 COL4
0 A 1 0.4 0.2
3 B 4 0.7 0.7
Run Code Online (Sandbox Code Playgroud)
您可以使用.nlargest。以下解决方案利用了Series构造函数将广播值以匹配索引形状的事实。
df.groupby(['COL1', 'COL2'])['COL3'].apply(
lambda s: pd.Series(s.nlargest(2).values, index=['COL3', 'COL4'])
).unstack()
Run Code Online (Sandbox Code Playgroud)
回报
COL3 COL4
COL1 COL2
A 1 0.4 0.2
B 4 0.7 0.7
Run Code Online (Sandbox Code Playgroud)