根据日期合并多个数据帧
您有多个具有公共日期列但行数和列数不同的数据帧。目标是合并这些数据帧以获得每个日期对所有数据帧通用的行。
低效递归方法
您尝试使用递归函数来合并数据帧是有缺陷的。该函数进入无限循环,因为它不断使用相同的输入调用自身。这种方法效率低下且容易出错。
使用reduce的优化解决方案
合并多个数据帧的更有效方法是使用functools模块中的reduce函数。此函数通过对相邻的数据帧对重复应用指定的合并操作,将数据帧列表缩减为单个数据帧。
以下代码片段演示了这种方法:
import pandas as pd from functools import reduce dfs = [df1, df2, df3] # list of dataframes df_merged = reduce(lambda left, right: pd.merge(left, right, on='date', how='outer'), dfs)
在此代码中,reduce 函数通过迭代合并相邻的数据帧对将 dfs 列表缩减为单个数据帧。 on='date' 参数指定应根据日期列执行合并。 how='outer' 参数确保两个数据帧中的所有行都包含在合并结果中,即使它们不共享相同的日期。
reduce 函数的优点
使用reduce函数提供了几个优点:
示例
使用提供的数据帧 df1、df2 和df3,您将获得以下合并数据框:
DATE VALUE1 VALUE2 VALUE3 0 May 15, 2017 1901.00 2902.00 3903.00
此数据框仅包含日期与所有三个输入数据框相同的行。
以上是如何根据公共日期列有效合并多个数据框?的详细内容。更多信息请关注PHP中文网其他相关文章!