带有熊猫数据框的内连接循环,用于可能存在或不存在的各种组合[重复]

Posted

技术标签:

【中文标题】带有熊猫数据框的内连接循环,用于可能存在或不存在的各种组合[重复]【英文标题】:Inner Join loop with pandas data frames for various combinations that may or not be present [duplicate] 【发布时间】:2017-11-22 06:03:57 【问题描述】:

当我的会话中出现多个数据帧的各种组合时,我需要一种智能方法来将它们连接在一起。通过连接完成事情的顺序无关紧要。

在这个简单的例子中,我有 4 个数据框,每个组合在我的环境中可能存在也可能不存在。

例如,每个逗号分隔引用代表 df1、df2、df3、df4 的数据帧。如果有帮助,我的数据框将始终使用这种类似的拼写。

我的数据框将始终加入数据框中的“ID”字段。

示例场景设置(记住有很多排列方式):

df1 = pd.DataFrame('ID': ['jack', 'mary', 'jill'], 'Score1': [1,2,3])
df3 = pd.DataFrame('ID': ['jack', 'mary','katy'],  'Score3': [111,222,333]
df4 = pd.DataFrame('ID': ['jack', 'mary','katy'],  'Score4': [1111,2222,3333]

下次我可以只拥有 df1 和 df4...等 如何设置数据帧的进一步示例:

存在,存在,存在,存在 不,不,不,存在 不,不,存在,存在 不,存在,存在,存在 等....我相信是4! ×3!组合?总会有至少一个数据框导致不会尝试连接

正在寻找的解决方案:

df_final = df1.merge(.....) 用于可能存在或不存在的 df#s 的所有组合

【问题讨论】:

【参考方案1】:

IIUC:

l = [df1,df3,df4]

pd.concat([i.set_index('ID') for i in l], axis=1)

输出:

      Score1  Score3  Score4
jack     1.0   111.0  1111.0
jill     3.0     NaN     NaN
katy     NaN   333.0  3333.0
mary     2.0   222.0  2222.0

或如 EFT 建议的那样:

print(pd.concat([i.set_index('ID') for i in l], axis=1, join='inner'))

输出:

      Score1  Score3  Score4
ID                          
jack       1     111    1111
mary       2     222    2222

【讨论】:

要获得内部连接,只需在此答案中将参数join='inner' 添加到pd.concat

以上是关于带有熊猫数据框的内连接循环,用于可能存在或不存在的各种组合[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 dplyr 中,如何通过可能存在或不存在的列连接数据框?

按日期迭代熊猫数据框的正确方法

带有多索引熊猫数据框的条形图

熊猫:按另一个数据框的值添加列

MySQL 中可能存在或不存在的引用数据

带有熊猫数据框的子图