Pandas横向合并同列名多DataFrame/CSV文件的实现方法
解决方案:按日期合并多DataFrame并区分结果列
要实现将多个包含date和result列的DataFrame合并为单一DataFrame(仅保留一个date列,每个原DataFrame的结果列独立),核心是先重命名重复的result列,再按date列做外连接,步骤如下:
1. 重命名结果列
为每个DataFrame的result列添加唯一标识(比如对应原DataFrame的序号或名称),避免列名冲突:
import pandas as pd # 示例数据 df1 = pd.DataFrame({ 'date': ['01/06/2023', '02/06/2023', '04/06/2023'], 'result': [0.5, 2.4, 6.5] }) df2 = pd.DataFrame({ 'date': ['01/06/2023', '03/06/2023', '04/06/2023'], 'result': [0.7, 0.5, 0.2] }) # 重命名result列 df1 = df1.rename(columns={'result': 'result_1'}) df2 = df2.rename(columns={'result': 'result_2'})
2. 按日期外连接合并
使用pd.merge()按date列做外连接,自动对齐所有日期,缺失数据会填充为NaN(Streamlit绘图可直接识别):
merged_df = pd.merge(df1, df2, on='date', how='outer')
运行后得到的merged_df即为预期格式:
| date | result_1 | result_2 |
|---|---|---|
| 01/06/2023 | 0.5 | 0.7 |
| 02/06/2023 | 2.4 | NaN |
| 03/06/2023 | NaN | 0.5 |
| 04/06/2023 | 6.5 | 0.2 |
3. 处理多个DataFrame的批量合并
如果有更多DataFrame,可通过循环批量处理:
# 假设有多个DataFrame存入列表 dfs = [df1, df2, df3] # 初始化合并结果 merged_df = dfs[0].rename(columns={'result': f'result_1'}) # 依次合并剩余DataFrame for idx, df in enumerate(dfs[1:], start=2): df_renamed = df.rename(columns={'result': f'result_{idx}'}) merged_df = pd.merge(merged_df, df_renamed, on='date', how='outer')
注意事项
- 若需要将
NaN显示为空字符串,可执行merged_df.fillna(''),但会将数值转为字符串,绘图前需注意类型转换; - Streamlit的折线图会自动忽略
NaN值,无需额外处理即可生成正确的折线展示。
内容的提问来源于stack exchange,提问作者Kronnow
相关产品推荐
相关产品推荐

