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

如何在Pandas中基于另一列的NaN重置值后重新加权列?

简洁实现Pandas权重调整需求

针对你给出的DataFrame,我们可以通过布尔索引结合向量化操作,更简洁高效地完成权重调整:将Type为np.nan的行的wgt设为0,同时让其余行的权重按比例缩放,保持总权重和原数值一致。

核心代码实现

import pandas as pd
import numpy as np

df = pd.DataFrame({'Type': ['A', np.nan, 'B', 'C', 'D', np.nan], 'wgt': [0.1, 0.2, 0.3, 0.25, 0.1, 0.05]})

# 计算原总权重
total_weight = df['wgt'].sum()
# 筛选Type非空的有效行
valid_mask = df['Type'].notna()
# 计算有效权重的总和
valid_total = df.loc[valid_mask, 'wgt'].sum()
# 生成新权重:有效行按比例缩放,空值行设为0
df['new_wgt'] = df['wgt'].where(~valid_mask, df['wgt'] * (total_weight / valid_total))

结果验证

运行后df['new_wgt']的结果为:

0    0.133333
1    0.000000
2    0.400000
3    0.333333
4    0.133333
5    0.000000
Name: new_wgt, dtype: float64

完全符合你的预期。

优势说明

  • 高效性:利用Pandas的向量化方法(where、布尔索引),避免循环或逐行操作,处理大数据集时性能更优
  • 简洁性:逻辑集中,仅需几行代码完成全部操作,可读性强
  • 可维护性:变量命名清晰,后续修改需求时更容易调整

内容的提问来源于stack exchange,提问作者mcragosta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 08:45:06