如何在Pandas的concat()中添加数据来源指示列?
当然可以实现!虽然pd.concat()没有像pd.merge()那样内置的indicator参数,但我们可以手动给每个要合并的DataFrame添加一个来源标识列,再执行合并,就能达到类似的效果,甚至还能自定义标识内容,更灵活。
给pd.concat()添加来源指示列的方法
1. 合并2个DataFrame的简单场景
先给每个DataFrame手动添加一个标识列,自定义它的取值来代表数据来源,再执行concat:
import pandas as pd # 示例数据 df1 = pd.DataFrame({'col1': [1, 2], 'col2': [3, 4]}) df2 = pd.DataFrame({'col1': [5, 6], 'col2': [7, 8]}) # 给每个DataFrame添加来源标识列 df1['data_source'] = 'df1' # 你可以改成任意自定义名称,比如"原始数据集A" df2['data_source'] = 'df2' # 执行合并 merged_result = pd.concat([df1, df2], ignore_index=True)
执行后,merged_result里的data_source列就会清晰显示每一行数据来自哪个原始DataFrame。
2. 合并多个DataFrame的批量处理场景
如果要合并的DataFrame数量较多,用循环批量添加标识列更高效:
import pandas as pd # 假设有3个待合并的DataFrame df1 = pd.DataFrame({'col1': [1, 2], 'col2': [3, 4]}) df2 = pd.DataFrame({'col1': [5, 6], 'col2': [7, 8]}) df3 = pd.DataFrame({'col1': [9, 10], 'col2': [11, 12]}) # 把所有DataFrame放进列表 df_list = [df1, df2, df3] # 自定义每个数据源的名称(也可以用索引编号) source_names = ['用户数据', '订单数据', '商品数据'] # 批量添加标识列 for df, name in zip(df_list, source_names): df['data_source'] = name # 执行合并 final_result = pd.concat(df_list, ignore_index=True)
补充说明
这种方法比merge的indicator更灵活:你可以完全自定义标识的内容,比如用业务场景里的真实名称(比如"2024年上半年数据"),而不是局限于merge里固定的left_only/right_only/both取值。如果是横向合并(axis=1),这个方法同样适用——只需要给每个DataFrame添加标识列后,按列合并即可。
内容的提问来源于stack exchange,提问作者CandleWax
相关产品推荐
相关产品推荐

