python - Pandas - 根据数据框中的 .loc 值,用单个值填充新列
问题描述
我有一个带有返回数据列表的 DataFrame。DataFrame 中的一行包含基准“ASX”的返回值,在此示例中其值为 6。(值使用市场数据更新,因此会每天更改,以下是为了简单起见)。
示例数据框:
import pandas as pd
IDs = ['ABC', 'DEF', 'GHI', 'ASX']
Returns = [5, 7, 10, 6]
data = {'ID': ['ABC', 'DEF', 'GHI', 'ASX'],
'Ret': [5, 7, 10, 6]}
frame = pd.DataFrame(data)
bmk = frame.loc[frame['ID'] == ('ASX'), 'Ret']
frame['Rel Ret'] = frame['Ret'] - bmk
frame
当前输出如下所示:
ID Ret Rel Ret
0 ABC 5 NaN
1 DEF 7 NaN
2 GHI 10 NaN
3 ASX 6 0.0
我的问题是,我想用 Ret 列减去“bmk”中的值填充整个“Rel Ret”列,即我想返回值 -1(5-6)、1(7-6)、4(10 -6), 0 (6-6)。整列怎么办?
解决方案
你bmk
是一个系列对象,当你减去两个熊猫系列时,它们的索引是对齐的,所以只有相同索引的行被减去。如果您确定在 中有一个值bmk
,您可以使用提取该值.iat[0]
,然后用它减去,在这种情况下,您从Series对象中减去一个标量,并且计算将广播到 Series 中的每个元素:
frame['Rel Ret'] = frame['Ret'] - bmk.iat[0]
frame
# ID Ret Rel Ret
#0 ABC 5 -1
#1 DEF 7 1
#2 GHI 10 4
#3 ASX 6 0
推荐阅读
- reactjs - 在 React 中编写 If 条件
- android - 如何使用gridlayoutmanager在recycler视图中离散滚动?
- sed - 保留包含“不同单词列表”的行,如模式
- javascript - 如何挂钩到 JavaScript 事件处理函数?
- swagger - 在 Swagger 中生成代码时如何使用 useBeanValidation 选项?
- canvas - 在画布中将 PDF 页面呈现为 SVG
- javascript - 克隆 select2 选项
- asp.net-mvc - 如何显示异常(类型)传递到 AddModelError?
- c# - 从 app.config 读取数据并在 c# 中跨多个类使用它
- javascript - 如何在垂直菜单(单页网站)中将滚动类更改为当前图标?