如何基于numpy掩码数组将Series值累加到DataFrame中
问题
给定以下变量:
import pandas as pd import numpy as np y = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]], columns=['A', 'B', 'C']) mask_y = np.array([[True, False, False], [False, False, True], [False, False, False]]) dist_y = pd.Series([0.222, 0.333, 0.444])
需要以mask_y中的True值为条件,将dist_y对应行的值累加到y的对应位置,预期输出:
A B C 0 1.222 2 3.000 1 4.000 5 6.333 2 7.000 8 9.000
尝试的代码无法运行:
y.loc[:, mask_y] += dist_y.values[:, None]
解决方法
原代码出错的核心原因:mask_y是3行3列的二维布尔数组,但y.loc[:, ...]的列索引参数要求是对应列的一维布尔数组或列标签,维度不匹配导致报错。
可以通过构造与y形状完全匹配的增量矩阵实现需求,以下是两种可行方案:
方法一:利用Numpy广播直接计算增量
# 将dist_y转为列向量,与mask_y相乘得到增量矩阵(仅mask为True的位置保留对应dist值) increments = dist_y.values[:, None] * mask_y # 直接累加到y上 y += increments
方法二:转为DataFrame后累加(确保索引和列完全对齐)
# 构造与y索引、列一致的增量DataFrame increments_df = pd.DataFrame( dist_y.values[:, None] * mask_y, index=y.index, columns=y.columns ) y += increments_df
运行上述任意一种代码后,y都会得到预期结果。
内容的提问来源于stack exchange,提问作者Murilo
相关产品推荐
相关产品推荐

