gpt4 book ai didi

python - 使用应用于数据框中每一列的多个参数的自定义函数

转载 作者:太空宇宙 更新时间:2023-11-04 04:56:42 26 4
gpt4 key购买 nike

我有一个看起来像这样的 df

data =  [{'Stock': 'Apple', 'Weight': 0.2, 'Price': 101.99, 'Beta': 1.1},
{'Stock': 'MCSFT', 'Weight': 0.1, 'Price': 143.12, 'Beta': 0.9},
{'Stock': 'WARNER','Weight': 0.15,'Price': 76.12, 'Beta': -1.1},
{'Stock': 'ASOS', 'Weight': 0.35,'Price': 76.12, 'Beta': -1.1 },
{'Stock': 'TESCO', 'Weight': 0.2, 'Price': 76.12, 'Beta': -1.1 }]
data_df = pd.DataFrame(data)

和一个将计算加权平均值的自定义函数

def calc_weighted_averages(data_in, weighted_by):
return sum(x * y for x, y in zip(data_in, weighted_by)) / sum(weighted_by)

我想将此自定义公式应用于我的 df 中的所有列,我的第一个想法是做某事。像这样

data_df = data_df[['Weight','Price','Beta']]
data_df = data_df.apply(lambda x: calc_weighted_averages(x['Price'], x['Weight']), axis=1)

如何固定我的 weighted_by 列并将自定义函数应用于其他列?我最终应该得到价格和 Beta 的加权平均数。

最佳答案

我认为您首先需要所有列的子集,然后使用第二个参数权重列:

s1 = data_df[['Price','Beta']].apply(lambda x: calc_weighted_averages(x, data_df['Weight']))
print (s1)
Price 87.994
Beta -0.460
dtype: float64

没有 apply 的另一种解决方案更快:

s1 = data_df[['Price','Beta']].mul(data_df['Weight'], 0).sum().div(data_df['Weight'].sum())
print (s1)
Price 87.994
Beta -0.460
dtype: float64

关于python - 使用应用于数据框中每一列的多个参数的自定义函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46889593/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com