根据另一列的条件,在pandas列中替换特定值。

6
这是我在StackOverflow上的第一个问题,如果需要我改变任何东西,请告诉我...
我想替换pandas数据框架列中的某些值,取决于与另一列中的值相关的条件,但如果条件为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

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

dict1.update({'B':'q'})
df[col2] = df[col1].map(dict1)

但是这个技巧只适用于两列中的值完全相关(或者如果col1的值是唯一的)。因此,我在想是否有更优雅的解决方案。只有当col1符合特定条件时,才替换col2中的值,否则保留原始值。
1个回答

12

使用locisin先掩码df,然后像之前一样调用map

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接