多个pandas数据框的交集

6

I have a number of dataframes (100) in a list as:

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

每个数据框都有两列:DateTime和Temperature。
我想在共同的DateTime列上交叉所有数据框,并将它们的Temperature列合并成一个大数据框:来自df1的Temperature,来自df2的Temperature,来自df3的Temperature,...,来自df100的Temperature。
(pandas merge不起作用,因为我必须计算多个(99)成对交集)。

(我尝试简化和明确措辞) - smci
3个回答

12

使用 pd.concat,它可以操作一组数据框(DataFrame)或序列(Series)。

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

使用pd.concat优于使用pd.merge,因为pd.merge每次执行时都会逐对复制数据。而pd.concat只复制一次。但是,pd.concat仅基于轴合并,而pd.merge也可以基于(多个)列合并。


1
连接后保留了多个“DateTime”列。有没有办法只保留一个“DateTime”列? - Zanam
1
是的,将DateTime设置为索引,对于每个数据框:[df.set_index('DateTime', inplace=True) for df in frameList] - Olaf

5
你可以尝试在Python中使用reduce功能,类似这样的方式。
dfs = [df0, df1, df2, dfN]
df_final = reduce(lambda left,right: pd.merge(left,right,on='DateTime'), dfs)

请问您能否通过 reduce 来解释一下这是如何工作的? - Zanam
内部函数lambda只在给定时间合并两个数据框.....reduce需要一个函数和一个要操作的list....它每次从列表中取出两个元素进行操作....以下链接详细解释了此内容 http://www.python-course.eu/lambda.php.....希望您接受并点赞我的答案.... - Vivek Srinivasan
我认为我的问题没有表述清楚。所以,我把所有的温度列都合并到了一列中。但是,我仍然想像我在问题编辑中所解释的那样将它们保持分开。 - Zanam
这将保留每个数据框中的温度列...结果将类似于“日期时间”| 温度_1 | 温度_2 ....| 温度_n .....这是你想要的吗? - Vivek Srinivasan

2
您可以按照以下方式遍历您的列表:
df_merge = frameList[0]
for df in frameList[1:]:       
    df_merge = pd.merge(df_merge, df, on='DateTime', how='inner')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接