gpt4 book ai didi

python - Pandas 中每行的前 3 个值

转载 作者:太空狗 更新时间:2023-10-30 02:51:39 25 4
gpt4 key购买 nike

我有一个大的 Pandas 数据框,它的脉络是:

| ID | Var1 | Var2 | Var3 | Var4 | Var5 |
|----|------|------|------|------|------|
| 1 | 1 | 2 | 3 | 4 | 5 |
| 2 | 10 | 9 | 8 | 7 | 6 |
| 3 | 25 | 37 | 41 | 24 | 21 |
| 4 | 102 | 11 | 72 | 56 | 151 |
...

我想生成如下所示的输出,为每行取 3 个最高值的列名:

| ID | 1st Max | 2nd Max | 3rd Max |
|----|---------|---------|---------|
| 1 | Var5 | Var4 | Var3 |
| 2 | Var1 | Var2 | Var3 |
| 3 | Var3 | Var2 | Var1 |
| 4 | Var5 | Var1 | Var3 |
...

我尝试使用 df.idmax(axis=1) 返回第一个最大列名,但我不确定如何计算其他两个?

如有任何帮助,我们将不胜感激,谢谢!

最佳答案

使用numpy.argsort对于通过索引选择 top3 的排序值的位置,最后将其传递给 DataFrame 构造函数:

df = df.set_index('ID')
df = pd.DataFrame(df.columns.values[np.argsort(-df.values, axis=1)[:, :3]],
index=df.index,
columns = ['1st Max','2nd Max','3rd Max']).reset_index()
print (df)
ID 1st Max 2nd Max 3rd Max
0 1 Var5 Var4 Var3
1 2 Var1 Var2 Var3
2 3 Var3 Var2 Var1
3 4 Var5 Var1 Var3

或者如果性能不重要,请使用 nlargest每行 apply:

c = ['1st Max','2nd Max','3rd Max']
df = (df.set_index('ID')
.apply(lambda x: pd.Series(x.nlargest(3).index, index=c), axis=1)
.reset_index())

关于python - Pandas 中每行的前 3 个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54923349/

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