拼接DataFrame时如何为索引添加来源标识符
实现方法
你可以通过两种方式快速实现需求,都不需要复杂逻辑:
方法1:提前给每个DataFrame的索引加来源后缀,再拼接
import pandas as pd # 模拟你的原始数据 df1 = pd.DataFrame({'column1': ['aaa']*4}) df2 = pd.DataFrame({'column1': ['aaa']*4}) # 分别给两个df的索引添加来源标识,不修改原数据可以先做.copy() df1_processed = df1.copy() df2_processed = df2.copy() df1_processed.index = df1_processed.index.astype(str) + '_df1' df2_processed.index = df2_processed.index.astype(str) + '_df2' # 拼接后重置索引即可得到你要的Index列 result = pd.concat([df1_processed, df2_processed]).reset_index(names='Index')
方法2:用concat自带的keys参数标记来源,后续统一处理索引
这种方法不需要提前修改每个df的索引,更适合多df批量拼接的场景:
import pandas as pd # 模拟你的原始数据 df1 = pd.DataFrame({'column1': ['aaa']*4}) df2 = pd.DataFrame({'column1': ['aaa']*4}) # 拼接时用keys标记每个df的来源,会自动生成多级索引 result = pd.concat([df1, df2], keys=['df1', 'df2']).reset_index() # 拼接生成你要的Index列,这里可以灵活调整序号规则 # 如果你要保留每个df内部的原有序号,用这行: result['Index'] = result['level_1'].astype(str) + '_' + result['level_0'] # 如果你要全局连续的序号,改成这行就行: # result['Index'] = result.index.astype(str) + '_' + result['level_0'] # 保留需要的列调整顺序 result = result[['Index', 'column1']]
注意事项
- 如果你不需要保留原始df的索引,直接修改原df的索引即可,不需要做copy操作
- 两种方法最终输出的格式都和你要求的完全匹配,可直接使用
内容的提问来源于stack exchange,提问作者redplanet
相关产品推荐
相关产品推荐

