我正在尝试在中创建一个加权列pandas.DataFrame
我有一条蟒蛇dictionary
钥匙是pandas.DataFrame
列名称和相应权重的值。
我想创建一个新的列,该列的权重基于dictionary
和参考pandas.DataFrame
列值。
考虑到我的情况,执行此操作的有效方法是什么dictionary
配置将更改并包含“错误配置”?
举个例子:
import pandas as pd
import numpy as np
weights = {'IX1' : 0.3, 'IX2' : 0.2, 'IX3' : 0.4, 'IX4' : 0.1}
np.random.seed(0)
df = pd.DataFrame(np.random.randn(10, 3), columns=['IX1', 'IX2', 'IX3'])
##Desired output --- manually combine
df['Composite'] = df['IX1']*0.3 + df['IX2']*0.2 + df['IX3']*0.4
我希望代码仍然可以运行,即使pandas.DataFrame
缺少列
首先为字典中的列和键创建相同值的变量Index.intersection http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Index.intersection.html,然后选择此列并使用矩阵乘法dot http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.dot.html with Series
来自仅针对相同列过滤的字典:
df['Composite'] = df['IX1']*0.3 + df['IX2']*0.2 + df['IX3']*0.4
cols = df.columns.intersection(weights.keys())
df['Composite1'] = df[cols].dot(pd.Series(weights)[cols])
print (df)
IX1 IX2 IX3 Composite Composite1
0 1.764052 0.400157 0.978738 1.000742 1.000742
1 2.240893 1.867558 -0.977278 0.654868 0.654868
2 0.950088 -0.151357 -0.103219 0.213468 0.213468
3 0.410599 0.144044 1.454274 0.733698 0.733698
4 0.761038 0.121675 0.443863 0.430192 0.430192
5 0.333674 1.494079 -0.205158 0.316855 0.316855
6 0.313068 -0.854096 -2.552990 -1.098095 -1.098095
7 0.653619 0.864436 -0.742165 0.072107 0.072107
8 2.269755 -1.454366 0.045759 0.408357 0.408357
9 -0.187184 1.532779 1.469359 0.838144 0.838144
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)