这是我关于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
说,如果col1中的值为'B'或'C',我想将col2中的值替换为'q',但保留原始值('z','x'),如果值为col1不是B或C.实际上我有更大的DataFrame,在col1中有数百个唯一值,并希望将col2中的值替换为大约20个。
我目前的解决方案是创建一个字典,使用col1作为键,col2作为值,然后:
dict1.update({'B':'q'})
df[col2] = df[col1].map(dict1)
但是,只有两列中的值完全相关(或者col1中的值是唯一的)时,此技巧才有效。
所以我想知道是否有更优雅的解决方案。因此,如果col1匹配某个条件,则只替换col2中的值,否则保留原始值。
答案 0 :(得分:4)
首先使用loc
和isin
屏蔽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