python - 带有 pandas 数据帧的内部 Join 循环用于可能存在或不存在的各种组合

标签 python loops pandas merge

<分区>

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

在这个简单的示例中,我有 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! x 3!组合?总会有至少一个数据框,因为不会尝试连接

寻找解决方案:

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

最佳答案

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

关于python - 带有 pandas 数据帧的内部 Join 循环用于可能存在或不存在的各种组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44640437/

相关文章:

python - 更改 tkinter 中按钮的颜色适用于 Windows,但不适用于 Mac OSX

c++ - 内联 asm 缓冲区循环

arrays - 扩展每个列单元格的列单元格

c - 如何检查输入结束? C、找到42

python - 读取文件 tkinter 中的行

Python 脚本在 cron 作业中运行时引发错误,但在其他时间没有

python - pandas isin() 返回与 eq() 不同的结果 - float dtype 依赖问题

Python 2.7-将函数应用于 pandas 数据框的 2 列的最快方法

python - 在 Python 中将数据帧拆分为多个 5 秒数据帧

python - 获取新列之前的列中的元素