我想向一个
Pandas
数据框添加一列,根据索引级别0和1设置值。例如,对于在级别0为hom
且delta
列大于0的索引,将值设置为buy
。对于在级别0为hom
且delta
列小于0的索引,将值设置为sell
。不同级别0的其他规则也有不同的设置值。请问如何实现?>df
delta
fut ABC 15284.233222
pos DEF 0.248976
POL 0.002041
ABC 0.043585
hom YTY 0.054100
MNN -0.356873
这是期望的输出结果:
>df
delta new_col
fut ABC 15284.23 nan
pos DEF 0.248976 nan
POL 0.002041 nan
ABC 0.043585 nan
hom YTY 0.054100 buy
MNN -0.356873 sell
我可以使用 loc
过滤数据框,但不确定如何创建新列。
df.loc[df.index.get_level_values(level=0) == 'hom'] > 0
delta new_col
hom YTY 0.054100 True
MNN -0.356873 False
np.where
的原因,如果DataFrame.where
(或Series.where
)可以替代两者,那我会使用它。如果你对纯粹的 pandas 替代方案感兴趣,你可以使用.map({True: 'buy', False: 'sell})
或pd.Categorical.from_codes(bool_arr, ['sell', 'buy'])
。 - Cameron Riddell