【问题标题】:How to copy values from other dataframe based on condition (same values of specific column)?如何根据条件(特定列的相同值)从其他数据框中复制值?
【发布时间】:2020-04-27 10:07:15
【问题描述】:

我有两个数据框(df1 和 df2),它们看起来像这样:

data1 = {'col1':[1,2,3,4,1,2,3,4,1,2,3,4], 'col2':np.arange(1,13)*2}

df1 = pd.DataFrame(data1)

data2 = {'x': [1,2,3,4], 'y': [10,20,40,5]}

df2 = pd.DataFrame(data2)

当 df1['col1'] 等于 df2['x'] 时,我想用 df2['y'] 的值向 df1 添加一个新列 'col3'。所以我的 df1 会保持这样:

col1    col2    col3
1      2      10
2      4      20
3      6      40
4      8      5
1      10     10
2      12     20
3      14     40
4      16     5
1      18     10
2      20     20
3      22     40
4      24     5

谁能帮帮我?

【问题讨论】:

    标签: python-3.x pandas dataframe conditional-statements


    【解决方案1】:

    map 与从df2 创建的字典一起使用

    df1['col3'] = df1.col1.map(dict(df2[['x', 'y']].values))
    

    df1['col3'] = df1.col1.map(dict(zip(df2.x, df2.y)))
    
    Out[886]:
        col1  col2  col3
    0      1     2    10
    1      2     4    20
    2      3     6    40
    3      4     8     5
    4      1    10    10
    5      2    12    20
    6      3    14    40
    7      4    16     5
    8      1    18    10
    9      2    20    20
    10     3    22    40
    11     4    24     5
    

    【讨论】:

    • 谢谢,安迪。这是更大数据框的示例。想象一下,我在 df2 中有更多列,只想添加 df2['y'] 的值。因此,如果我有更多列,我将无法使用您的确切代码。如何在您的代码中指定这些列?
    • @LucasA:只需使用要映射的 2 列的切片。我编辑了我的答案。请检查更新
    • @LucasA: 或zip 2列创建字典
    • 就是这样!非常感谢!
    【解决方案2】:

    使用merge

    df1.merge(df2, how='left', left_on='col1', right_on='x') \
        [['col1', 'col2', 'y']] \
        .rename(columns={'y': 'col3'})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-27
      • 1970-01-01
      • 2021-08-06
      • 2020-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-02
      相关资源
      最近更新 更多