多个熊猫数据框的交集

Posted

技术标签:

【中文标题】多个熊猫数据框的交集【英文标题】:Intersection of multiple pandas dataframes 【发布时间】:2017-03-24 19:51:30 【问题描述】:

我在列表中有许多数据框 (100):

frameList = [df1,df2,..,df100]

每个数据框都有两列DateTimeTemperature

我想将公共 DateTime 列上的所有数据框相交,并将它们的所有 Temperature 列组合/合并到一个大数据框中:来自 df1 的温度,来自 df2 的温度,来自 df3 的温度,..,来自df100.

(pandas merge 不起作用,因为我必须计算多个 (99) 成对交叉点)。

【问题讨论】:

(我试图改写更简单明了) 【参考方案1】:

你可以尝试在python中使用reduce功能..类似这样的

dfs = [df0, df1, df2, dfN]
df_final = reduce(lambda left,right: pd.merge(left,right,on='DateTime'), dfs)

【讨论】:

你能解释一下这是如何通过reduce工作的吗? 内部函数 lambda 只是在给定时间合并两个数据帧.....reduce 需要一个函数和一个list 来处理......它需要从列表中的两个元素有时间可以解决它....以下详细说明python-course.eu/lambda.php.....hope您接受并支持我的回答.... 我认为我的问题并不清楚。因此,我将所有温度列合并为一列。正如我在问题编辑中解释的那样,我仍然希望将它们分开。 这将保留每个数据帧中的温度列......结果将是这样的“日期时间”|温度_1 |温度_2 ....| Temperature_n .....是你想要的吗【参考方案2】:

你可以像这样遍历你的列表:

df_merge = frameList[0]
for df in frameList[1:]:       
    df_merge = pd.merge(df_merge, df, on='DateTime', how='inner')

【讨论】:

【参考方案3】:

使用pd.concat,它适用于DataFrames 或Series 列表。

pd.concat(frameList, axis=1, join='inner')

这比使用pd.merge 更好,因为pd.merge 每次执行时都会成对复制数据。 pd.concat 只复制一次。但是,pd.concat 只能基于轴进行合并,而pd.merge 也可以在(多个)列上进行合并。

【讨论】:

它在 concat 之后保留乘以“DateTime”列。有没有办法只保留 1 个“日期时间”。 是的,将 DateTime 设为索引,对于每个数据帧:[df.set_index('DateTime', inplace=True) for df in frameList]

以上是关于多个熊猫数据框的交集的主要内容,如果未能解决你的问题,请参考以下文章

如何按列绘制数据框的多个字典?蟒蛇熊猫

如何在熊猫数据框的行之间应用多个条件创建目标数据框

熊猫数据框:在进行涉及两个数据框的算术运算时如何在多个索引级别上进行匹配

带有熊猫数据框的子图

加快对熊猫数据框的许多访问

对熊猫数据框的深度嵌套 JSON 响应