gpt4 book ai didi

python - 查找数据帧行中的前 n 个值 (Python)

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

我想找到数据帧一行中的前 n 个值。

实际例子:

data = {'First':  [1, 2,3],
'Second': [2,1,5],
'Third': [5,1,2]
}
df = pd.DataFrame (data, columns = ['First','Second','Third'])

First Second Third
0 1 2 5
1 2 1 3
2 3 5 2

我想迭代每一行并选择前 n 个值。在此示例中,将前 2 个值替换为 1,将所有其他值替换为 0。

所以我想要的输出如下:

 First Second Third
0 0 1 1
1 1 0 1
2 1 1 0

最佳答案

您可以使用 df.rank 并将方法设置为 min 并获取大于列数 - 2 的列,其中与 (df.shape[1]-n) 相同,获取前 2 个。然后将 astype 转换为 int -

data = {'First':  [1, 2,3],
'Second': [2,1,5],
'Third': [5,3,2]
}
df = pd.DataFrame (data, columns = ['First','Second','Third'])


n = 2 #define top n

(df.rank(1)>(df.shape[1]-n)).astype(int)
   First  Second  Third
0 0 1 1
1 1 0 1
2 1 1 0

替代:您也可以使用 numpy 来解决这个问题。 double argsort 返回每个数字按行排列的顺序。在这种情况下,前 n 名的阈值将减少 1,因为排名是从 0 开始的。 -

new_data = (df.to_numpy().argsort(1).argsort()>(df.shape[1]-n-1)).astype(int)
df2 = pd.DataFrame(new_data, columns = ['First','Second','Third'])
print(df2)
   First  Second  Third
0 0 1 1
1 1 0 1
2 1 1 0

关于python - 查找数据帧行中的前 n 个值 (Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65937496/

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