每次合并具有不同列名的熊猫数据框列表

Posted

技术标签:

【中文标题】每次合并具有不同列名的熊猫数据框列表【英文标题】:Merge a list of pandas dataframes WITH different column names each time 【发布时间】:2022-01-04 14:48:27 【问题描述】:

我有一个数据框列表,其中包含要加入的相应列名,例如:

dfs = [df1, df2, df3, df4]

col_join = ["col1", "col2", "col3"]

我已经看到了在 Python 中使用 reduce 函数的答案。

import pandas as pd
from functools import reduce
reduce(lambda x, y: pd.merge(x, y, on=["Col1"], how="outer"), dfs)

我想要达到的目标如下:

df1 列:

Data1 Dim1 Dim2 Dim3

df2 列:

示例 1 示例 2 示例 3

df3 列:

其他1 其他2 其他3

df1 到 df2 由 Dim1 连接到 Example1。 df1 到 df3 由 Dim2 连接到 Other1。 此列表一直持续到 df(n),其中 n 甚至可以是 20 个数据帧,它们以不同的列名连接到 df1。

我的想法是传递一个函数,其中包含原始 df1 和其余 df2、df3、df4 ... dfn 的列表。

其他参数是合并列的列表,如上例所示:left_on=["Dim1"], right_on=["Example1"]。

接下来是在 Dim2 和 Other1 上将 df1(已在连接中包含 df2)加入 df3。

每个数据框都将在不同的列上连接到 df1,该列可能与 df1 同名,也可能不同,这就是为什么 left 和 right 是应该使用的参数。d

如何将合并列在reduce函数中的每个连接处发生变化的事实结合起来?

提前谢谢你。

【问题讨论】:

你应该提供一个最小的例子来说明你的问题;) 我只是添加了更多解释。我希望它澄清。 一个具有预期输出的最小示例比长描述更明确 【参考方案1】:

这可能有效(未经测试):

result = df1
for df, col in zip(dfs[1:], col_join):
    result = pd.merge(result, df, on=[col], how='outer')

【讨论】:

以上是关于每次合并具有不同列名的熊猫数据框列表的主要内容,如果未能解决你的问题,请参考以下文章

熊猫合并:合并同一列上的两个数据框,但保留不同的列

合并具有不同索引的熊猫系列(对齐一个索引)

合并具有不同行的熊猫数据框? [复制]

Python:我有具有相同列名的熊猫数据框。如何改变其中之一?

Python Pandas - 具有不同列的 Concat 数据框忽略列名

熊猫用不同的列python连接数据框列表