You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 02:48:09