根据其他列中的条件替换 pandas 列中的某些特定值

Bar*_*Dur 6 python pandas

这是我关于 StackOverflow 的第一个问题,所以让我知道我是否应该以不同的方式制定任何内容......

我想替换 Pandas Dataframe 列中的某些值,这取决于与另一列中的值相关的条件,但如果条件为 False,则保留原始值。例如:

import pandas as pd    
df=pd.DataFrame({'col1':['A','B','C','B'], 'col2':['z','x','x','x']},
                  columns=['col1','col2'])

df =
   col1 col2
0    A    z
1    B    x
2    C    x
3    B    x
Run Code Online (Sandbox Code Playgroud)

说,如果 col1 中的值是 'B' 或 'C',我想将 col2 中的值替换为 'q',但如果 col1 中的值不是,则保留原始值 ('z','x') B 或 C。实际上,我有更大的 DataFrame,在 col1 中有数百个唯一值,并且希望将 col2 中的值替换为大约 20 个。
我目前的解决方案是创建一个字典,使用 col1 作为键,使用 col2 作为值,然后:

dict1.update({'B':'q'})
df[col2] = df[col1].map(dict1)
Run Code Online (Sandbox Code Playgroud)

但是这个技巧只有在两列中的值完全相关时才有效(或者如果 col1 中的值是唯一的)。

所以我想知道是否有更优雅的解决方案。因此,如果 col1 匹配某个条件,则仅替换 col2 中的值,否则保留原始值。

EdC*_*ica 9

首先使用locand屏蔽 dfisinmap像以前一样调用:

In [376]:
dict1 = {'B':'q'}
df.loc[df['col1'].isin(dict1.keys()), 'col2'] = df['col1'].map(dict1)
df

Out[376]:
  col1 col2
0    A    z
1    B    q
2    C    x
3    B    q
Run Code Online (Sandbox Code Playgroud)