根据另一列中的 nan 重置值后重新调整 Pandas 列的权重

问题描述 投票:0回答:1

这里是PyNoob。给定数据框,例如:

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]})

我想为 Type =

0
设置 wgts =
nan
,并重新加权 wgts,以便它们的总和仍为相同的值(本例中为 1)。我可以通过几个步骤来实现这一点;即获取
sum(wgts)
,获取
sum(nan_wgts)
,将 wgts 设置为 0,其中 Type 为
nan
,然后
new_wgts = wgts * (1 + (sum(nan_wgts)/sum(wgts)))

结果应该是:

'new_wgt' = ~ [0.1333, 0, 0.4, 0.3333, 0.1333, 0]

当然,有比我更简单有效的方法来做到这一点。谢谢

python pandas
1个回答
0
投票

使用

np.select
就像if-else语句一样,为每个条件分配一个值,使用起来非常高效,下面是示例代码:

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]})
    .assign(wgt = lambda df_: np.select([df_.Type.isna(), df_.Type.notna()], [0, df_.wgt]))
)

我希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.