Pandas使用.loc取基准值后全列批量计算相对收益率的实现方法
问题原因
你当前代码获取的bmk是带索引的Pandas Series对象,Pandas在执行Series和Series的运算时会自动按索引对齐匹配,只有和bmk索引相同的行(即ID为ASX的第3行)能得到计算结果,其余行因索引不匹配都会返回NaN。
解决方案
只需将bmk转换为单个标量值,即可实现全列批量减法计算,常用有两种写法可选:
- 使用
.iloc[0]提取Series的首个值 - 使用
.item()直接提取标量数值
修改后的完整代码如下:
import pandas as pd data = {'ID': ['ABC', 'DEF', 'GHI', 'ASX'], 'Ret': [5, 7, 10, 6]} frame = pd.DataFrame(data) # 提取基准值为标量,两种写法二选一即可 bmk = frame.loc[frame['ID'] == 'ASX', 'Ret'].iloc[0] # bmk = frame.loc[frame['ID'] == 'ASX', 'Ret'].item() frame['Rel Ret'] = frame['Ret'] - bmk print(frame)
运行后输出结果如下:
ID Ret Rel Ret 0 ABC 5 -1 1 DEF 7 1 2 GHI 10 4 3 ASX 6 0
内容的提问来源于stack exchange,提问作者Marmot
相关产品推荐
相关产品推荐

