gpt4 book ai didi

python - 获取 Pandas 数据框中每一行的第二大值的列名

转载 作者:行者123 更新时间:2023-12-02 15:44:46 24 4
gpt4 key购买 nike

假设我有这样的 Pandas 数据框

df = pd.DataFrame({
'a': [4, 5, 3, 1, 2],
'b': [20, 10, 40, 50, 30],
'c': [25, 20, 5, 15, 10]
})

所以 df 看起来像:

print(df)
a b c
0 4 20 25
1 5 10 20
2 3 40 5
3 1 50 15
4 2 30 10

我想获取每行中第二大值的列名。借用 Felex Le 在这个 thread 中的答案,我现在可以通过以下方式获得第二大值(value):

def second_largest(l = []):    
return (l.nlargest(2).min())

print(df.apply(second_largest, axis = 1))

这给了我:

0    20
1 10
2 5
3 15
4 10
dtype: int64

但我真正想要的是这些值的列名,或者说:

0    b
1 b
2 c
3 c
4 c

Pandas 有一个函数 idxmax 可以完成最大值的工作:

df.idxmax(axis = 1)

0 c
1 c
2 b
3 b
4 b
dtype: object

是否有任何优雅的方法来完成相同的工作但获得第二大值?

最佳答案

使用numpy.argsort对于第二大值的位置:

df['new'] = df['new'] = df.columns.to_numpy()[np.argsort(df.to_numpy())[:, -2]]
print(df)
a b c new
0 4 20 25 b
1 5 10 20 b
2 3 40 5 c
3 1 50 15 c
4 2 30 10 c

您的解决方案应该有效,但速度很慢:

def second_largest(l = []):    
return (l.nlargest(2).idxmin())

print(df.apply(second_largest, axis = 1))

关于python - 获取 Pandas 数据框中每一行的第二大值的列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74612525/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com