【问题标题】:Assign one dataframe column values to another by common column values通过公共列值将一个数据框列值分配给另一个
【发布时间】:2017-06-18 10:56:37
【问题描述】:

假设我有两个数据框,df1,df2,如下所示。 df1:

   A   B    C
0  4  40  300
1  2  70  900
2  5  80  900

和另一个数据框df2:

   A  D   E
0  1  0  00
1  2  0  00
2  3  0  00
3  4  0  00
4  5  0  00 
5  6  0  00

现在我想根据 A 列匹配的条件将 df1['C'] 列的值分配给 df2['E']。结果应该是

   A  D   E
0  1  0  00
1  2  0  900
2  3  0  00
3  4  0  300
4  5  0  900 
5  6  0  00

我该怎么做?

注意:我正在寻找类似更新 df2 而不是合并的东西,因为我必须在一个循环中多次执行此操作。

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    可以使用合并功能。

    df2 =pd.merge(df2,df1,on='A',how='left')
    df2 = df2.fillna(value='00')
    df2 = df2[['A','D','C']].rename(columns={'C': 'E'})
    print(df2)
       A  D    E
    0  1  0   00
    1  2  0  900
    2  3  0   00
    3  4  0  300
    4  5  0  900
    5  6  0   00
    

    【讨论】:

      【解决方案2】:

      你可以使用 pd.merge()

      pd.merge(df2[['A','D']],df1[['A']].assign(E=df1.C),on='A',how='left').fillna('00')
      
      Out[269]: 
         A  D    E
      0  1  0   00
      1  2  0  900
      2  3  0   00
      3  4  0  300
      4  5  0  900
      5  6  0   00
      

      或者你可以使用 df.update()

      df2_new = df2.set_index('A')
      df2_new.update(df1.assign(E=df1.C).set_index('A'))
      df2_new.reset_index()
      Out[254]: 
         A  D    E
      0  1  0   00
      1  2  0  900
      2  3  0   00
      3  4  0  300
      4  5  0  900
      5  6  0   00
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-23
        • 2019-01-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多