python – 计算pandas数据帧的选定列的加权和的推荐方法是什么?
发布时间:2020-12-20 11:09:02 所属栏目:Python 来源:网络整理
导读:例如,我想计算下面矩阵的列’a’和’c’的加权和,并在字典w中定义权重. df = pd.DataFrame({'a': [1,2,3],'b': [10,20,30],'c': [100,200,300],'d': [1000,2000,3000]})w = {'a': 1000.,'c': 10.} 我自己想出了一些选项(见下文),但看起来有点复杂.对于这个基
例如,我想计算下面矩阵的列’a’和’c’的加权和,并在字典w中定义权重.
df = pd.DataFrame({'a': [1,2,3],'b': [10,20,30],'c': [100,200,300],'d': [1000,2000,3000]}) w = {'a': 1000.,'c': 10.} 我自己想出了一些选项(见下文),但看起来有点复杂.对于这个基本用例,是不是有直接的熊猫操作?像df.wsum(w)这样的东西? 我尝试了 df.dot(pd.Series(w)) # This raises an exception: # "ValueError: matrices are not aligned" 通过为每列指定权重可以避免异常,但这不是我想要的. w = {'a': 1000.,'b': 0.,'c': 10.,'d': 0. } df.dot(pd.Series(w)) # This works 如何仅计算列子集上的点积?或者,可以在应用点操作之前选择感兴趣的列,或者利用pandas / numpy在计算(行式)总和时忽略nans的事实(见下文). 以下是我能够发现自己的三种方法: w = {'a': 1000.,'c': 10.} # 1) Create a complete lookup W. W = { c: 0. for c in df.columns } W.update(w) ret = df.dot(pd.Series(W)) # 2) Select columns of interest before applying the dot product. ret = df[list(w.keys())].dot(pd.Series(w)) # 3) Exploit the handling of NaNs when computing the (row-wise) sum ret = (df * pd.Series(w)).sum(axis=1) # (df * pd.Series(w)) contains columns full of nans 我错过了一个选项吗? 解决方法
您可以在第一个示例中使用Series,之后只需使用reindex:
import pandas as pd df = pd.DataFrame({'a': [1,3000]}) w = {'a': 1000.,'c': 10.} print(df.dot(pd.Series(w).reindex(df.columns,fill_value=0))) 产量 0 2000.0 1 4000.0 2 6000.0 dtype: float64 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- pyinstaller打包的exe太大?你需要嵌入式python玄
- Python使用xlwt模块操作Excel的方法详解
- python – 从打包为zip文件的应用程序的命令行运
- github常见操作和常见错误!错误提示:fatal: re
- python – 在pandas dataframe中查找最新日期
- python – Seaborn / Matplotlib:如何在factorp
- python – `如果键在dict`与`try / except` – 这
- python – 有没有办法在使用operator.itemgetter
- 在python文件中指定编码时,python中的“magic li
- 基于Python os模块常用命令介绍
热点阅读