如何将多个Pandas DataFrame的列值按日期索引合并为单列?
合并多个Pandas DataFrame的item列(按日期索引,逗号分隔)
需求
把多个带item列的Pandas DataFrame,按日期索引合并成一个新DataFrame,同一日期的item值用逗号分隔成单列。
示例数据代码
import pandas as pd s1 = pd.DataFrame({'item':['apple','apple','apple']}, index=['1/2/2024','1/5/2024','1/6/2024']) s2 = pd.DataFrame({'item':['orange','orange','orange']}, index=['1/3/2024','1/5/2024','1/7/2024']) s3 = pd.DataFrame({'item':['banana','banana','banana','banana']}, index=['1/4/2024','1/5/2024','1/6/2024','1/7/2024'])
解决代码
import pandas as pd # 把所有目标DataFrame放入列表 dfs = [s1, s2, s3] # 合并所有DataFrame,保留原索引 combined_df = pd.concat(dfs) # 按索引分组,将每组的item值用逗号拼接 result_df = combined_df.groupby(combined_df.index)['item'].apply(','.join).to_frame() # 可选:按日期排序,让结果更规整 result_df.index = pd.to_datetime(result_df.index) result_df = result_df.sort_index() result_df.index = result_df.index.strftime('%m/%d/%Y') print(result_df)
运行结果
item 01/02/2024 apple 01/03/2024 orange 01/04/2024 banana 01/05/2024 apple,orange,banana 01/06/2024 apple,banana 01/07/2024 orange,banana
简单说明
- 合并DataFrame:
pd.concat()把多个小DataFrame拼成一个大的,所有日期和对应的item都集中在一起。 - 分组拼接:
groupby(索引)按日期分组,apply(','.join)把每组的item值连成逗号分隔的字符串,to_frame()转回DataFrame格式。 - 日期排序:如果原始日期索引顺序混乱,转成datetime类型排序后再转回原格式,保证结果按日期顺序排列,不需要的话可以删掉这部分代码。
内容的提问来源于stack exchange,提问作者EddyBoy
相关产品推荐
相关产品推荐

