python - 计算列之间加权乘积之和的最快方法是什么?

标签 python performance pandas numpy dataframe

np.random.seed([3, 14])
df = pd.DataFrame(np.random.randn(5, 3), columns=list('ABC'))
df

          A         B         C
0 -0.602923 -0.402655  0.302329
1 -0.524349  0.543843  0.013135
2 -0.326498  1.385076 -0.132454
3 -0.407863  1.302895 -0.604236
4 -0.243362 -0.211261 -2.056621

最快的计算方式是什么 df.A * 1 + df.B * 2 + df.C * 3

本质上,我想要这个数据框:

0   -0.501247
1    0.602741
2    2.046290
3    0.385219
4   -6.835748

答案不能df.A * 1 + df.B * 2 + df.C * 3因为列数不能被硬编码。所以,我想计算 df.iloc[:, 0] * 1 + df.iloc[:, 1] * 2, ....不知怎的。

我对任何 numba 感兴趣解决方案也在那里!

最佳答案

我尝试改进解决方案 - 删除 reshape 并更改排列:

a = df.dot(np.arange(1, len(df.columns)+1))
print (a)
0   -0.501247
1    0.602741
2    2.046290
3    0.385219
4   -6.835748
dtype: float64

numpy相同:

a = pd.Series(np.dot(df.values, np.arange(1, len(df.columns)+1)), index=df.index)
print (a)
0   -0.501247
1    0.602741
2    2.046290
3    0.385219
4   -6.835748
dtype: float64

关于python - 计算列之间加权乘积之和的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46112251/

相关文章:

python - 使用 Django 时,Pylint 不会报告错误的导入顺序

c# - 为什么这个 List<>.IndexOf 代码比 List[i] 和手动比较快得多?

Python Pandas : How can I drop rows using df. drop 和 df.loc?

python - Pandas 按日期范围进行剪切或分组

python - 在 python __init__ 中捕获多个参数之一

Python Pandas - 问题附加/连接两个多索引数据帧

python - 索引错误: string index out of range:

sql - 带有许多 :many join is very slow 的 PostgreSQL 查询

javascript - 注册检查电子邮件是否存在而不检查数据库

python - 将 API 中的 JSON 数据解析到 Pandas