这里是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]
当然,有比我更简单有效的方法来做到这一点。谢谢
使用
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]))
)
我希望这有帮助!