根据其他列条件更改多列

时间:2018-10-30 01:50:32

标签: python pandas

A    B  C   D   E   F    G   H  I   J
1   22  2   7   8   1   22  2   7   8
1   71  5   53  50  1   71  5   5   5
0   3   6   2   2   0   4   6   2   2
1   61  51  3   50  1   61  5   3   2
0   52  2   2   4   0   6   2   2   4
1   2   1   51  4   1   41  1   5   4
0   1   4   2   4   0   40  4   2   4
0   50  5   2   7   0   50  5   2   7

说我有上述数据框 如果列B == 51或52,50,我想将列F的值更改为I至55。我想对其他列(例如C,E)重复此操作。这是我在pandas中编写的代码。

df.loc[(df['B'] == 50) | (df['B'] == 51) | df['B'] == 50) | (df['C'] == 51), ['F', 'G', 'H', 'I' ]] = 55

它不起作用。

1 个答案:

答案 0 :(得分:0)

iiuc,您的意思是这样的:

df.loc[df['B'].isin([50, 51, 52]) | df['C'].isin([50, 51, 52]), ['F', 'G', 'H', 'I']] = 55

编辑:

要获取更长的查询列列表,请使用

luc = ['B', 'C', 'E', 'F']
df.loc[df[luc].isin([50, 51, 52]).any(axis=1), ['F', 'G', 'H', 'I']] = 55

(感谢@jezrael指出直接可访问的方法any

df.loc[np.any(df[luc].isin([50, 51, 52]), axis=1), ['F', 'G', 'H', 'I']] = 55