如何仅对两个Pandas DataFrame的指定对应列进行相加操作?
解决Pandas仅指定列相加的问题
嘿,这个需求很清晰——要保留ID和atext列不变,只对var1到var25这些列进行对应相加对吧?直接用add()确实会把所有列都加起来,咱们可以用下面几种方法精准控制:
方法一:用filter()快速匹配目标列
如果你的目标列都是以var开头的(比如var1、var2...var25),用filter(like='var')可以一键提取这些列,不用手动列全25个列名:
# 先复制需要保留的列到新DataFrame absum_df = a_df[['ID', 'atext']].copy() # 提取所有var开头的列,相加后赋值到新DataFrame var_cols = a_df.filter(like='var').columns absum_df[var_cols] = a_df[var_cols].add(b_df[var_cols])
方法二:手动指定目标列列表
如果列名规则明确(比如就是var1到var25),也可以用列表推导式生成列名列表,精准定位:
# 生成var1到var25的列名列表 var_cols = [f'var{i}' for i in range(1, 26)] # 复制原DataFrame的所有列,然后只更新var列的值 absum_df = a_df.copy() absum_df[var_cols] = a_df[var_cols].add(b_df[var_cols])
这种方式的好处是完全可控,不会误匹配其他带var的列(如果有的话)。
额外提醒:确保行对齐
要注意两个DataFrame的行是一一对应的哦!如果ID是唯一标识,最好先按ID对齐,避免错位相加:
# 先把ID设为索引,保证对应行匹配 a_df = a_df.set_index('ID') b_df = b_df.set_index('ID') # 执行相加操作 absum_df = a_df[['atext']].copy() absum_df[var_cols] = a_df[var_cols].add(b_df[var_cols]) # 最后把ID还原成列 absum_df = absum_df.reset_index()
内容的提问来源于stack exchange,提问作者profhoff
相关产品推荐
相关产品推荐

