首页 > 解决方案 > 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)。整列怎么办?

标签: pythonpandasfillna.loc

解决方案


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

推荐阅读