我试图根据熊猫中的条件更改所有列的值(如果第1列的值大于1,则将其设置为1),我可以为一列做到这一点而不会遇到任何错误,但是
如果多列的值都大于一,将多列设置为一,怎么可能呢? df.loc[df['column1']>=1,'column1'] =1
上面的行工作正常,但下面的行不起作用:
df.loc[df['column1','column2']>=1,['column1','column2']] = 1
我收到以下错误消息,我们将不胜感激
KeyError: ('column1', 'column2')
答案 0 :(得分:2)
我不认为.loc[]
最适合多维密钥,建议尝试np.where()
:
df[['column1','column2']]=np.where(df[['column1','column2']]>=1,1,df[['column1','column2']])
添加示例:
np.random.seed(123)
df=pd.DataFrame(np.random.randint(-2,4,20).reshape(5,4),
columns=[f'column{i+1}' for i in range(4)])
print(df)
column1 column2 column3 column4
0 3 0 2 0
1 -1 1 0 1
2 -1 -1 -2 -1
3 -1 -2 -2 -1
4 1 3 2 -2
df[['column1','column2']]=np.where(df[['column1','column2']]>=1,1,df[['column1','column2']])
print(df)
column1 column2 column3 column4
0 1 0 2 0
1 -1 1 0 1
2 -1 -1 -2 -1
3 -1 -2 -2 -1
4 1 1 2 -2