gpt4 book ai didi

python - 用列的顺序替换 Pandas 数据框中的值

转载 作者:太空宇宙 更新时间:2023-11-03 12:44:12 24 4
gpt4 key购买 nike

我们如何替换数据框中的特定值,以便替换等于这些特定值所在的第 i 列的顺序?例如我有这个 DF:

A  B  C
0 0 1
1 0 0
1 0 0
0 1 0
1 0 1

用 1 所在的第 i 列(第 1、2、3 等)的顺序替换此数据框中的所有 1,这样它就会像这样丢失:

A  B  C
0 0 3
1 0 0
1 0 0
0 2 0
1 0 3

这就是我认为可行的方法,但它没有:

 DF_2= [(0 if i== 0 else j  for i in DF.iloc[:,j]  ) for j in range(DF.shape[1]) ]

最佳答案

如果只有 10 值,您可以将多个由 values 转换的 numpy 数组使用 np.arrange:

print (np.arange(1, len(df.columns)+1))
[1 2 3]


print (df.values * np.arange(1, len(df.columns)+1))
[[0 0 3]
[1 0 0]
[1 0 0]
[0 2 0]
[1 0 3]]

df = pd.DataFrame(df.values * np.arange(1, len(df.columns)+1),
index=df.index, columns=df.columns)
print (df)
A B C
0 0 0 3
1 1 0 0
2 1 0 0
3 0 2 0
4 1 0 3

更通用的解决方案(如果 0 和另一个数字)是将值转换为 bool 值:

print (df)
A B C
0 0 0 4
1 1 0 0
2 1 0 0
3 0 6 0
4 1 0 1

df = pd.DataFrame(df.astype(bool).values * np.arange(1, len(df.columns)+1),
index=df.index, columns=df.columns)
print (df)
A B C
0 0 0 3
1 1 0 0
2 1 0 0
3 0 2 0
4 1 0 3

感谢您提供其他解决方案(Jon ClementsMaxU):

df = df.replace({col: {1: n} for n, col in enumerate(df.columns[1:], 2)})
print (df)
A B C
0 0 0 3
1 1 0 0
2 1 0 0
3 0 2 0
4 1 0 3

df = df * np.arange(1, df.shape[1]+1)
print (df)
A B C
0 0 0 3
1 1 0 0
2 1 0 0
3 0 2 0
4 1 0 3

时间:

N = 100
cols = ['col' + str(i) for i in range(N)]
df = pd.DataFrame(np.random.choice([0,1], size=(100000,N)), columns=cols)
[100000 rows x 100 columns]
#print (df)


In [101]: %timeit pd.DataFrame(df.values * np.arange(1, len(df.columns)+1), index=df.index, columns=df.columns)
10 loops, best of 3: 25.1 ms per loop

In [102]: %timeit df.replace({col: {1: n} for n, col in enumerate(df.columns[1:], 2)})
1 loop, best of 3: 1.39 s per loop

In [103]: %timeit df * np.arange(1, df.shape[1]+1)
10 loops, best of 3: 21 ms per loop

#Wen solution
In [104]: %timeit (df.mul(list(range(1, len(df.columns)+1))))
10 loops, best of 3: 38.7 ms per loop

关于python - 用列的顺序替换 Pandas 数据框中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45462637/

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