【问题标题】:Check common rows between two dataframes and replace the matched rows of second dataframe, with the values of df1检查两个数据帧之间的公共行并将第二个数据帧的匹配行替换为 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

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    map + fillna:

    map 允许我们替换常见 URL 的年龄,然后 .fillna 恢复不匹配的 URL 的值。这假设URLdf1 中的唯一键:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-10
      • 1970-01-01
      • 2014-03-22
      • 2020-10-09
      • 1970-01-01
      • 2021-03-20
      相关资源
      最近更新 更多