Pandas中如何实现多行DataFrame与单行同列DataFrame逐列相加
实现方法
核心逻辑是保留Id标识列不对其做运算,对两个DataFrame的同名字段做广播加法,同时规避pandas默认按行索引对齐导致的空值问题,具体代码如下:
import pandas as pd # ---------------------- # 1. 构造测试数据(实际使用时替换为你自己的X、y读取逻辑即可) # ---------------------- X = pd.DataFrame({ 'Id': [1, 2, 3], 'Jakarta': [10, 20, 30], 'Bandung': [40, 50, 60] }) y = pd.DataFrame({ 'Jakarta': [11], 'Bandung': [12] }) # ---------------------- # 2. 计算相加结果 # ---------------------- Xplusy = X.copy() # 复制原表避免修改原始X的数据 # 自动识别两个表的同名列,不需要手动硬编码列名 common_columns = X.columns.intersection(y.columns) # 取y的第一行数值做广播加法,自动匹配列名逐行相加 Xplusy[common_columns] = X[common_columns] + y[common_columns].iloc[0]
执行后打印Xplusy就能得到你需要的结果:
Id Jakarta Bandung 0 1 21 52 1 2 31 62 2 3 41 72
注意事项
- 不要直接写
X + y或者X[common_columns] + y[common_columns]:pandas默认会同时对齐行索引和列名,y只有1行数据,行索引和X的其余行不匹配时,会返回NaN空值,无法得到正确结果 - 用
intersection()取同名列的写法兼容性更好,后续两个表新增同名字段时不需要修改计算逻辑,会自动参与加法运算 - 调用
copy()是为了避免修改原始X表的数据,如果不需要保留原X数据,可以省略该步骤直接在X上修改
内容的提问来源于stack exchange,提问作者Nabih Bawazir
相关产品推荐
相关产品推荐

