根据条件替换一列的值

时间:2019-05-20 09:11:32

标签: python pandas dataframe

我有两个名为dfdf_reference的数据帧,其中包含以下信息:

df                  df_reference
col1  col2          col1 col2
 A     10            A    15
 B     25            B    33
 C     30            C    20
 A     12

我想比较两个基于col1的数据帧。 如果df.col2中的值大于df_reference.col2的值,我想用df_reference替换df.col2的值。

预期输出为:

df                  
col1  col2         
 A     15            
 B     33           
 C     30           
 A     15

我尝试过:

dict1 = {'a':'15'}
df.loc[df['col1'].isin(dict1.keys()), 'col2'] = sams['col1'].map(dict1)

2 个答案:

答案 0 :(得分:1)

Series.mapDataFrame.set_index创建的Series一起使用,如果某些值不匹配,则将NaN替换为Series.fillna

s = df['col1'].map(df_reference.set_index('col1')['col2']).fillna(df['col2'])

df.loc[s > df['col2'], 'col2'] =  s
print (df)
  col1  col2
0    A    15
1    B    33
2    C    30
3    A    15

答案 1 :(得分:0)

我建议您首先基于'col1'进行合并,然后应用一个函数,该函数生成具有两个'col2'中较大值的新列。然后只需删除无用的列!

df = df.merge(df_reference, left_on='col1', right_on='col1')
df['col2'] = df.apply(greaterValue, axis=1)
df = df.loc[:,['col1','col2']]

--name