【问题标题】:append columns of a data frame to a different data frame in pandas将数据框的列附加到熊猫中的不同数据框
【发布时间】:2013-11-18 09:11:50
【问题描述】:

鉴于这两个 pandas 数据框:

>>> df1 = pd.DataFrame({'c1':['a','b','c','d'], 'c':['x','y','y','x']})

  c1 c2
0  a  x
1  b  y
2  c  y
3  d  x

>>> df2 = pd.DataFrame({'c1':['d','c','a','b'], 'val1':[12,31,14,34], 'val2':[0,0,1,1]})

  c1  val1  val2
0  d    12     4
1  c    31     3
2  a    14     1
3  b    34     2

考虑到c1 中的元素,我想将df2val1val2 列附加到数据框df1。更新后的df1 将如下所示:

>>> df1

  c1 c2 val1  val2
0  a  x  14     1
1  b  y  34     2
2  c  y  31     3
3  d  x  12     4

我想到了使用 set_index 和 update 的组合: df1.set_index('c1').update(df2.set_index('c1')),但是没用……

【问题讨论】:

    标签: python pandas append dataframe


    【解决方案1】:

    你可以使用pd.merge:

    import pandas as pd
    
    df1 = pd.DataFrame({'c1':['a','b','c','d'], 'c2':['x','y','y','x']})
    df2 = pd.DataFrame({'c1':['d','c','a','b'], 'val1':[12,31,14,34], 'val2':[4,3,1,2]})
    
    df1 = pd.merge(df1, df2, on=['c1'])
    print(df1)
    

    产量

      c1 c2  val1  val2
    0  a  x    14     1
    1  b  y    34     2
    2  c  y    31     3
    3  d  x    12     4
    

    【讨论】:

    • 谢谢,效果很好!如果 df2 中有更多列(例如 val1、val2 和 val3)但只对 val1 和 val2 感兴趣,您将如何解决问题?我试过 pd.merge(df1, df2.loc[:,['val1','val2']], on=['c1']) 但出错了。
    • df2 替换为df2[['val1', 'val2', 'c1']]
    • 你的意思是:pd.merge(df1, df2[['val1','val2']], on=['c1']) 对吧?它仍然给我同样的错误:KeyError: u'no item named c1'.
    • @HappyPy :) :您需要在df2 中包含c1 列——否则pd.merge 将不知道要合并哪个共享列。请参阅上面我的(已编辑)评论。
    猜你喜欢
    • 2014-01-03
    • 1970-01-01
    • 2018-06-07
    • 2019-01-14
    • 2022-11-25
    • 2020-05-21
    • 2018-02-08
    • 2017-06-13
    • 2018-12-01
    相关资源
    最近更新 更多