加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 使用pandas连接两个数据帧中的不同列(并附加类似的列)

发布时间:2020-12-20 12:35:26 所属栏目:Python 来源:网络整理
导读:我的问题与 Pandas Merge – How to avoid duplicating columns密切相关但不完全相同. 我想连接三个数据帧中不同的列.数据框有一个列id,有些列是相同的:Ex. DF1 id place name qty unit A 1 NY Tom 2 10 a2 TK Ron 3 15 a3 Lon Don 5 90 a4 Hk Sam 4 49 a D
我的问题与 Pandas Merge – How to avoid duplicating columns密切相关但不完全相同.

我想连接三个数据帧中不同的列.数据框有一个列id,有些列是相同的:Ex.

DF1

id place name qty unit A 
1 NY    Tom   2  10   a
2 TK    Ron   3  15   a
3 Lon   Don   5  90   a
4 Hk    Sam   4  49   a

DF2

id place name qty unit B 
1 NY    Tom   2  10   b
2 TK    Ron   3  15   b
3 Lon   Don   5  90   b
4 Hk    Sam   4  49   b

DF3

id place name qty unit C D
1 NY    Tom   2  10   c d
2 TK    Ron   3  15   c d
3 Lon   Don   5  90   c d
4 Hk    Sam   4  49   c d

结果:

id place name qty unit A B C D
1 NY    Tom   2  10   a b c d
2 TK    Ron   3  15   a b c d
3 Lon   Don   5  90   a b c d
4 Hk    Sam   4  49   a b c d

列的位置,名称,数量和单位将始终是三个数据框的一部分,不同的列的名称可能会有所不同(在我的示例中为A,B,C,D).三个数据帧具有相同的行数.

我试过了:

cols_to_use = df1.columns - df2.columns
dfNew = merge(df,df2[cols_to_use],left_index=True,right_index=True,how='outer')

问题是我获得了比预期更多的行,并且在结果数据帧中重命名了列(使用concat时).

解决方法

使用functools中的reduce

from functools import reduce
reduce(lambda left,right: pd.merge(left,right),[df1,df2,df3])
Out[725]: 
   id place name  qty  unit  A  B  C  D
0   1    NY  Tom    2    10  a  b  c  d
1   2    TK  Ron    3    15  a  b  c  d
2   3   Lon  Don    5    90  a  b  c  d
3   4    Hk  Sam    4    49  a  b  c  d

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读