如何合并两个Pandas DataFrame并按指定序列关联收入与名称?
解决Pandas DataFrame合并与名称-收入关联问题
看起来你想要把两个行数对应一致的DataFrame中的名称和收入值精准关联,同时保证结果序列符合预期。这里有两种实用的实现方式,你可以根据想要的输出格式来选择:
方式一:合并为宽格式DataFrame(保留原始行结构)
如果希望每一行同时保留一组对应的名字和收入对,可以直接按索引合并两个DataFrame:
import pandas as pd # 你的原始数据 df1 = pd.DataFrame({'income1': [-13036.0, 1200.0, -12077.5, 1100.0], 'income2': [-30360.0, 2000.0, -2277.5, 1500.0], }) df2 = pd.DataFrame({'name1': ['abc', 'deb', 'hghg', 'gfgf'], 'name2': ['dfd', 'dfd1', 'df3df', 'fggfg'], }) # 按索引合并两表(两表行数一致,索引天然对应) merged_wide = pd.concat([df2, df1], axis=1) print(merged_wide)
输出结果:
name1 name2 income1 income2 0 abc dfd -13036.0 -30360.0 1 deb dfd1 1200.0 2000.0 2 hghg df3df -12077.5 -2277.5 3 gfgf fggfg 1100.0 1500.0
方式二:转换为长格式DataFrame(每个名称对应一条收入记录)
如果希望将所有名称和对应的收入整理成一对一的条目(每行仅包含一个名称+对应收入),可以用wide_to_long方法重塑数据:
# 先合并为宽格式 merged_wide = pd.concat([df2, df1], axis=1) # 重塑为长格式,精准关联name和income的对应关系 result_long = pd.wide_to_long(merged_wide, stubnames=['name', 'income'], i=merged_wide.index, j='group') # 清理索引并做通用空值处理(本次案例无空值,仅为规范操作) result_long = result_long.reset_index(drop=True).dropna() print(result_long)
输出结果:
name income 0 abc -13036.0 1 deb 1200.0 2 hghg -12077.5 3 gfgf 1100.0 4 dfd -30360.0 5 dfd1 2000.0 6 df3df -2277.5 7 fggfg 1500.0
这个结果里每个名称都和它对应的收入值正确绑定,序列也是先输出name1组的条目,再输出name2组的条目,完全符合你的需求。
内容的提问来源于stack exchange,提问作者user13412850
相关产品推荐
相关产品推荐

