Python 基于其他列条件更改多列
假设我有上面的数据帧 如果列B==51或52,50,我想将列F到I的值更改为55。我想对其他专栏,如C,E重复这一点。这是我在pandas中编写的代码Python 基于其他列条件更改多列,python,pandas,Python,Pandas,假设我有上面的数据帧 如果列B==51或52,50,我想将列F到I的值更改为55。我想对其他专栏,如C,E重复这一点。这是我在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
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
它不起作用了。你是说这样的东西:
df.loc[(df['B'] == 50) | (df['B'] == 51) | df['B'] == 50) | (df['C'] == 51), ['F', 'G', 'H', 'I' ]] = 55
编辑:
对于较长的查找列列表,您可以使用
df.loc[df['B'].isin([50, 51, 52]) | df['C'].isin([50, 51, 52]), ['F', 'G', 'H', 'I']] = 55
(感谢@jezrael指出了直接可访问的方法any
)
或
这可能是因为创建了初始数据帧的视图或副本。因此,您并没有像您所想的那样修改df。我有数百个列要更改。有没有办法这样做df.loc[df['B','C','E','F'].isin([50,51,52]),[F','G','H','I','X','Y','W','Z']=51
。apply(any axis=1)
应该更改为。any axis=1)
未测试,只有ideaI问了一个错误的问题,我想检查这些列:假设B,C,D。如果列值等于50,51,52….将其更改为55。但是这一个df.loc[df['B',C',E',F'].isin([50,51,52]),['F',G',H',I',X',Y',W',Z']=55更改整个['F',G',H',H',I',X',Y',W',Z']值到55。请精确:假设谈论您的示例时只看B、C和D:如果[50、51、52]中只有一列,您是想更改所有三列的值,还是只想更改找到匹配值的列中的值…?或者什么?
luc = ['B', 'C', 'E', 'F']
df.loc[df[luc].isin([50, 51, 52]).any(axis=1), ['F', 'G', 'H', 'I']] = 55
df.loc[np.any(df[luc].isin([50, 51, 52]), axis=1), ['F', 'G', 'H', 'I']] = 55