gpt4 book ai didi

python - 如何在 Pandas 数据框中找到每一行的顶部列值

转载 作者:行者123 更新时间:2023-12-04 01:27:54 25 4
gpt4 key购买 nike

对于具有 m 列的给定数据框(假设 m=10),在每一行中,我试图找到前 n 列值(假设 n=2)。在为每一行找到这些前 n 值之后,我想在该行中分配剩余的列值,m - n到 0。

例如,从第一个表中提到的值的数据框开始,我尝试使用前面讨论的过滤选项创建第一个表的表示。如果超过 n 列具有相同的值,则优先考虑较低的列索引号

| col_A | col_B | col_C | col_D | col_E |
|-------|-------|-------|-------|-------|
| 0.1 | 0.1 | 0.3 | 0.4 | 0.5 |
| 0.06 | 0.1 | 0.1 | 0.1 | 0.01 |
| 0.24 | 0.24 | 0.24 | 0.24 | 0.24 |
| 0.20 | 0.25 | 0.30 | 0.12 | 0.02 |
| col_A | col_B | col_C | col_D | col_E |
|-------|-------|-------|-------|-------|
| 0 | 0 | 0 | 0.4 | 0.5 |
| 0 | 0.1 | 0.1 | 0 | 0 |
| 0.24 | 0.24 | 0 | 0 | 0 |
| 0 | 0.25 | 0.3 | 0 | 0 |

有没有更简单的方法来实现这个实现。矢量化格式有助于显着减少大型数据帧的处理时间

谢谢

最佳答案

第一个想法是按 Series.nlargest 比较每行的前 N ​​个值和 nset 值 DataFrame.where :

N = 2
df = df.where(df.apply(lambda x: x.eq(x.nlargest(N)), axis=1), 0)
print (df)
col_A col_B col_C col_D col_E
0 0.00 0.00 0.0 0.4 0.5
1 0.00 0.10 0.1 0.0 0.0
2 0.24 0.24 0.0 0.0 0.0
3 0.00 0.25 0.3 0.0 0.0

为了提高性能,使用了 numpy,@Divakar 的解决方案:

N = 2
#https://stackoverflow.com/a/61518029/2901002
idx = np.argsort(-df.to_numpy(), kind='mergesort')[:,:N]
mask = np.zeros(df.shape, dtype=bool)
np.put_along_axis(mask, idx, True, axis=-1)
df = df.where(mask, 0)
print (df)
col_A col_B col_C col_D col_E
0 0.00 0.00 0.0 0.4 0.5
1 0.00 0.10 0.1 0.0 0.0
2 0.24 0.24 0.0 0.0 0.0
3 0.00 0.25 0.3 0.0 0.0

关于python - 如何在 Pandas 数据框中找到每一行的顶部列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61517044/

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