如何在列数不同的pandas DataFrame中对同名列做减法并保留其他列
解决方法
可以通过以下步骤实现,无需手动指定列名:
- 提取同名列:利用列名的交集操作,自动找出两个DataFrame共有的列
- 计算同名列差值:对共有的列执行减法运算
- 提取独有列:分别获取两个DataFrame中独有的列
- 合并结果:将差值结果与所有独有列拼接成新的DataFrame
完整代码示例
import pandas as pd data1 = {'Brazil': [1, 2], 'Chile': [3, 4], 'Indonesia': [5, 6], 'China': [7, 8]} data2 = {'Brazil': [0, 1], 'Chile': [2, 3], 'China': [4, 5]} df1 = pd.DataFrame(data=data1) df2 = pd.DataFrame(data=data2) # 获取同名列 common_cols = df1.columns.intersection(df2.columns) # 计算同名列的差值 diff_result = df1[common_cols] - df2[common_cols] # 获取df1独有的列 df1_unique = df1[df1.columns.difference(df2.columns)] # 如果df2有独有列,同样提取(示例中df2无独有列,可根据实际情况保留) df2_unique = df2[df2.columns.difference(df1.columns)] # 合并所有部分到新DataFrame final_df = pd.concat([diff_result, df1_unique, df2_unique], axis=1) # 可选:恢复原DataFrame中的列顺序(如果需要) # final_df = final_df[df1.columns.union(df2.columns)] print(final_df)
运行结果
Brazil Chile China Indonesia 0 1 1 3 5 1 1 1 3 6
说明
columns.intersection()自动筛选出两个DataFrame的共同列,完全避免手动指定列名,适合处理大量列的场景columns.difference()提取当前DataFrame独有的列,确保不会遗漏任何独有数据pd.concat(axis=1)按列拼接数据,保证所有需要的列都被整合到结果中- 如果需要保持原DataFrame的列顺序,可以取消最后一行注释,用
union()获取所有列的完整顺序
内容的提问来源于stack exchange,提问作者danielssl
相关产品推荐
相关产品推荐

