【问题标题】:Joining two DataFrames in with Pandas if one column matches a set of other columns如果一个列与一组其他列匹配,则将两个 DataFrame 与 Pandas 连接
【发布时间】:2022-01-26 13:32:23
【问题描述】:

我正在尝试加入/合并两个 Pandas DataFrame,但如果一列与第二帧上一组列的 any 匹配,我想加入行。有两列的示例(我的真实集合中有八列)。

我的数据不可能有多个匹配项。

df1 =

    person  fav second_fav
0   adam    xxx cherry
1   bob banana  yyy

df2 =

    fruit   fruit_val
0   apple   10
1   banana  20
2   cherry  30

想要的输出:

    person  fav     second_fav    fruit_val
0   adam    xxx     cherry        30
1   bob     banana  yyy           20

【问题讨论】:

  • 多场比赛会发生什么?
  • 我可以接受任何结果。它可以首先匹配或匹配所有(创建多行)。
  • 如果第 0 行有苹果,fruit_val 会是什么
  • 最终的df中会有两个adam,一个是fruitval 10,一个是30

标签: python python-3.x pandas


【解决方案1】:

使用每个条件将两个数据框合并两次有助于实现这一目标

import pandas as pd
df1 = pd.DataFrame(data = {'person':['adam','bob'],
                           'fav':['xxx','banana'],
                           "second_fav":['cherry','yyy'],})

df2 = pd.DataFrame(data = {'fruit':['apple','banana','cherry'],
                           'fruit_val':[10,20,30],})

使用第一个条件的第一个内部连接

result1 = pd.merge(df1, df2, left_on=['fav'], right_on=['fruit'], how='inner', sort=True)

第二次加入

result2 = pd.merge(df1, df2, left_on=['second_fav'], right_on=['fruit'], how='inner', sort=True)

附加两个数据框

result_final = result1.append(result2)

result_final
Out[14]: 
  person     fav second_fav   fruit  fruit_val
0    bob  banana        yyy  banana         20
0   adam     xxx     cherry  cherry         30

【讨论】:

  • 这是我要做的,但我认为必须有更好的方法......也许将所有列加入一个列表,然后使用一个函数进行合并?
猜你喜欢
  • 1970-01-01
  • 2022-08-19
  • 2015-02-11
  • 1970-01-01
  • 1970-01-01
  • 2018-09-15
  • 2018-07-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多