【问题标题】:Dataframe Merge with match key in two different columns数据框与两个不同列中的匹配键合并
【发布时间】:2021-03-04 10:55:07
【问题描述】:

我想merge两个DataFrame,但是第二个DataFrame中的匹配键分散在两个不同的列中。合并两个 DF 的最佳方法是什么?

import pandas as pd

data1 = {'key': ['abc','efg', 'xyz', 'sdf']}
data2 = {'key1' : ['abc','sss','ggg','ccc'],
         'key2' : ['aaa','efg','xyz', 'sdf'],
         'msg' : ['happy','mad','smile','great']}

df1= pd.DataFrame(data1)
df2= pd.DataFrame(data2)

【问题讨论】:

  • 键是否按照您的示例进行排序?

标签: python pandas merge inner-join


【解决方案1】:

解决此问题的最简单方法是融合数据框并合并数据框

data1 = {'key': ['abc','efg', 'xyz', 'sdf']}
data2 = {'key1' : ['abc','sss','ggg','ccc'],
         'key2' : ['aaa','efg','xyz', 'sdf'],
         'msg' : ['happy','mad','smile','great']}
data1 = pd.DataFrame(data1)
data2 = pd.DataFrame(data2).melt(id_vars='msg', value_name='key').drop('variable', axis=1)
df = data1.merge(data2, on='key')

df = 
    key msg
0   abc happy
1   efg mad
2   xyz smile
3   sdf great

【讨论】:

  • 谢谢。我不能使用 melt,因为我需要保留第二个 DataFrame (DF2) 中的其他列。
  • 在 id_vars 中将所有列作为列表提及,并且数据框将仅熔化关键列。让我知道这是否有效
【解决方案2】:

如果两个数据框都存在 df1 的 row1 对应 df2 的 row1 的关系,以此类推,那么您可以简单地在索引上合并。

代码:

df = pd.merge(df1, df2, left_index=True, right_index=True)
print(df)

输出:

   key key1 key2    msg
0  abc  abc  aaa  happy
1  efg  sss  efg    mad
2  xyz  ggg  xyz  smile
3  sdf  ccc  sdf  great

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-12
    • 1970-01-01
    • 2011-11-30
    相关资源
    最近更新 更多