gpt4 book ai didi

使用 DataFrame 和 dict 获得加权总和的 Pythonic 方法

转载 作者:行者123 更新时间:2023-12-03 21:45:05 24 4
gpt4 key购买 nike

给定一个 DataFrame 和一个 Dict,我怎样才能得到一个带有加权总和的新列? Dict 中的键与 DataFrame 中的列名匹配

import pandas as pd
df = pd.DataFrame({'Index': ['aaa', 'bbb', 'ccc'],
'a': [1, 2, 3],
'b': [4, 5, 6],
'c': [7, 8, 9]})
df.set_index('Index', inplace=True)

weights = {'a': 0.5,
'b': 0.2
}
在这里,我想要一个 pythonic 方式(我目前正在做一个大循环!)来获得以下结果:
| Index   | a   | b   | c   | weighted_sum            |
| aaa | 1 | 4 | 7 | (1 * 0.5) + (4 * 0.2) |
| bbb | 2 | 5 | 8 | (2 * 0.5) + (5 * 0.2) |
| ccc | 3 | 6 | 9 | (3 * 0.5) + (6 * 0.2) |
注意,我不会总是知道权重字典中的键是什么

最佳答案

你可以做:

df['weighted_sum'] = df[['a','b']].mul(weights).sum(1)
或等效地:
df['weighted_sum'] = (df[['a','b']] * weights).sum(1)
输出:
       a  b  c  weighted_sum
Index
aaa 1 4 7 1.3
bbb 2 5 8 2.0
ccc 3 6 9 2.7

现在,如果您不总是知道 key ,您可以通过 weights.keys() 获取 key 。 :
(df[weights.keys()] * weights).sum(1)
那可能会抛出 KeyError如果您的键不在数据框的列中。在这种情况下,您可以转 weights成一个系列,Pandas 将为您完成繁重的工作。
df.mul(pd.Series(weights)).sum(1)

关于使用 DataFrame 和 dict 获得加权总和的 Pythonic 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64904728/

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