每次合并具有不同列名的熊猫数据框列表
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:我有具有相同列名的熊猫数据框。如何改变其中之一?