如何基于唯一Time列合并多个pandas DataFrame
问题原因
直接调用pd.concat(dfList)默认是纵向按行拼接,逻辑是把多个DataFrame的行依次堆叠,不会自动根据公共列做行对齐,所以相同时间戳会被拆成独立行。
要实现按Time列对齐、把不同表的业务列合并到同一行,可根据表的数量选以下两种方案:
实现方案
表数量少(2~3个):用
merge按公共键关联
直接指定关联键为Time列,使用外连接保证所有时间戳都被保留,示例代码:# 两表合并,有更多表可继续链式追加merge new_df = pd.merge(df1, df2, on='Time', how='outer') # 按需按时间升序排序,重置索引 new_df = new_df.sort_values('Time').reset_index(drop=True)表数量多:转索引后横向拼接
表数量多的时候逐表写merge效率低,可以先把每个表的Time列设为行索引,再指定concat按列横向拼接,示例代码:dfList = [df1, df2] # 预处理所有表:将Time设为行索引 processed_df_list = [df.set_index('Time') for df in dfList] # axis=1 指定横向按列拼接 new_df = pd.concat(processed_df_list, axis=1) # 把Time索引转回普通列,排序重置索引 new_df = new_df.reset_index().sort_values('Time').reset_index(drop=True)
注意事项
如果单个DataFrame里同一个
Time对应多行重复数据,合并前先对每个表做去重处理,避免合并后出现异常的重复列:# 对单个表按Time去重,保留最后一条记录 df = df.drop_duplicates(subset='Time', keep='last')
内容的提问来源于stack exchange,提问作者rdx
相关产品推荐
相关产品推荐

