我有一个样本数据框:

import pandas as pd
df = pd.DataFrame({
    'id' : [1 ,2, 3],
    'pts': [25,20,9],
    'ast': [8, 14, 7],
    'reb': [1, 4, 9],
    'oth': [5,6,7],
    'tov': [4, 2, 1]
})
print(df)

   id  pts  ast  reb  oth  tov
0   1   25    8    1    5    4
1   2   20   14    4    6    2
2   3    9    7    9    7    1

我想基本上应用一些权重/乘以某些列,然后将它们相加并使其成为新的列(score).并不是df中的每一列都有查找映射.

我可以通过一个函数手动将数学应用到每一列来完成此操作:

def f(in_df):
  return in_df['pts'] + (in_df['reb'] * 1.2) + (in_df['ast'] * 1.5) - df['tov']

df['score'] = f(df)
print(df)

   id  pts  ast  reb  oth  tov  score
0   1   25    8    1    5    4   34.2
1   2   20   14    4    6    2   43.8
2   3    9    7    9    7    1   29.3

不过,我想使用字典查找来完成它:

score_dict = {'pts': 1, 'reb': 1.2, 'ast': 1.5, 'tov': -1}

# Something like ..?
df['score'] = df[?].map(lambda d: sum(k * v for k, v in score_dict.items()))

我看着this post,并试图实现如下所示的映射.不过,该解决方案只有一列用于映射;我不知道如何正确实现它.

推荐答案

您可能想要对每列的"权重"进行点积,即

import pandas as pd
df = pd.DataFrame({
    'id' : [1 ,2, 3],
    'pts': [25,20,9],
    'ast': [8, 14, 7],
    'reb': [1, 4, 9],
    'tov': [4, 2, 1]
}).set_index('id')

df2 = pd.Series({'pts': 1, 'reb': 1.2, 'ast': 1.5, 'tov': -1})
df['score'] = df.dot(df2)

df

[输出]:

    pts ast reb tov score
id                  
1   25  8   1   4   34.2
2   20  14  4   2   43.8
3   9   7   9   1   29.3

Python相关问答推荐

大Pandas 胚胎中产生组合

Django mysql图标不适用于小 case

rame中不兼容的d类型

在Pandas DataFrame操作中用链接替换'方法的更有效方法

什么相当于pytorch中的numpy累积ufunc

Python库:可选地支持numpy类型,而不依赖于numpy

删除字符串中第一次出现单词后的所有内容

我们可以为Flask模型中的id字段主键设置默认uuid吗

OR—Tools CP SAT条件约束

在np数组上实现无重叠的二维滑动窗口

多处理队列在与Forking http.server一起使用时随机跳过项目

用渐近模计算含符号的矩阵乘法

使用BeautifulSoup抓取所有链接

为什么if2/if3会提供两种不同的输出?

Python避免mypy在相互引用中从另一个类重定义类时失败

使用字典或列表的值组合

在电影中向西北方向对齐""

为什么按下按钮后屏幕的 colored颜色 保持不变?

FileNotFoundError:[WinError 2]系统找不到指定的文件:在os.listdir中查找扩展名

如何在不不断遇到ChromeDriver版本错误的情况下使用Selify?