多个熊猫数据框的交集
Posted
技术标签:
【中文标题】多个熊猫数据框的交集【英文标题】:Intersection of multiple pandas dataframes 【发布时间】:2017-03-24 19:51:30 【问题描述】:我在列表中有许多数据框 (100):
frameList = [df1,df2,..,df100]
每个数据框都有两列DateTime
、Temperature
。
我想将公共 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]
。以上是关于多个熊猫数据框的交集的主要内容,如果未能解决你的问题,请参考以下文章