使用Pandas匹配DataFrame添加category列时如何保留原索引?
保留原索引的两种解决方案
你的思路没问题,melt转置df2是正确的,但merge会默认生成新索引,要保留原索引可以试试这两种方法:
方法一:先保存原索引再恢复
先把df1的原索引存成一列,merge后再设回索引:
# 先把原索引存为单独列 df1['original_idx'] = df1.index # 你的原有melt和merge步骤 mel = df2.melt(var_name='Category', value_name='name') df1 = df1.merge(mel, on='name') # 把保存的列重新设为索引,恢复原样 df1.set_index('original_idx', inplace=True) # 可选:去掉索引的名称,和原df1保持一致 df1.index.name = None
方法二:用映射字典直接赋值(更高效)
不用merge,先从df2构建「名称-类别」的映射字典,再用map给df1加列,全程不碰索引:
# 构建name到category的映射字典 category_map = {} for category in df2.columns: for item in df2[category]: category_map[item] = category # 直接添加Category列,原索引完全保留 df1['Category'] = df1['name'].map(category_map)
这种方法更简洁,而且不会因为merge产生额外的操作,索引从头到尾都不会变。
内容的提问来源于stack exchange,提问作者Jojo Ann
相关产品推荐
相关产品推荐

