我有两个名为df
和df_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)
答案 0 :(得分:1)
将Series.map
与DataFrame.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