检查两个数据帧之间的公共行并将第二个数据帧的匹配行替换为 df1 的值
Posted
技术标签:
【中文标题】检查两个数据帧之间的公共行并将第二个数据帧的匹配行替换为 df1 的值【英文标题】:Check common rows between two dataframes and replace the matched rows of second dataframe, with the values of df1 【发布时间】:2019-08-15 03:45:22 【问题描述】:我有两个数据框,比如说 df1 和 df2。两个数据框都具有名为 URL 和 Age 的相同列。我想检查df2 ['URL']中的df1 ['URL'],然后用df1 ['Age']替换匹配行的df2 ['Age'],并将其余行保留在df2中而不做任何更改。
df1
URL Category Age
google.com [IAB19, Technology & Computing] A
youtube.com [IAB25, Non-Standard Content] H
facebook.co [IAB14, Society] A
amazon.com [IAB22, Shopping] M
wpedia.org [IAB5, Education] E
df2
URL Category Age
google.com [IAB19, BBCA] T
youtube.com [IAB25, AACB] T
facebook.co [IAB14, HLGB T
amazon.com [IAB22, ETCL] T
wpedia.org [IAB5, J TCL] T
example1.com [LHTB, 2213] A
example2.com [OPCL, 9909] A
example3.com [PPRS, 7656] A
现在,我想检查 df2['URL'] 中是否存在 df1['URL'] 中的任何 URL,我想用 df1['Age'] 替换 df2['Age'] 并保持不常见URLS 没有任何变化。
因此,预期的输出将是:
df3
URL Category Age
google.com [IAB19, BBCA] A
youtube.com [IAB25, AACB] H
facebook.co [IAB14, HLGB A
amazon.com [IAB22, ETCL] M
wpedia.org [IAB5, J TCL] E
example1.com [LHTB, 2213] A
example2.com [OPCL, 9909] A
example3.com [PPRS, 7656] A
【问题讨论】:
【参考方案1】:
map
+ fillna
:
map 允许我们替换常见 URL 的年龄,然后 .fillna
恢复不匹配的 URL 的值。这假设URL
是df1
中的唯一键:
df3 = df2.copy()
df3['Age'] = df3.URL.map(df1.set_index('URL').Age).fillna(df3.Age)
# URL Category Age
#0 google.com [IAB19, BBCA] A
#1 youtube.com [IAB25, AACB] H
#2 facebook.co [IAB14, HLGB A
#3 amazon.com [IAB22, ETCL] M
#4 wpedia.org [IAB5, J TCL] E
#5 example1.com [LHTB, 2213] A
#6 example2.com [OPCL, 9909] A
#7 example3.com [PPRS, 7656] A
【讨论】:
以上是关于检查两个数据帧之间的公共行并将第二个数据帧的匹配行替换为 df1 的值的主要内容,如果未能解决你的问题,请参考以下文章