所以这个解释有点令人困惑,所以我希望这个例子会有所帮助。我想要做的是获得DataFrame中每一行添加或消除加权平均值的贡献。要做到这一点,我需要一个列,显示如果我们将值乘以权重除以(权重之和 - 此行的权重),所有行的sum()将是多少。我想知道最有效的方法。
最好的解释方法是编码:
In [54]: ex_dic = {1: {'Weight': 100, 'X': 10}, 2: {'Weight': 200, 'X': 20}, 3: {'Weight': 500, 'X': 35}}
In [58]: df = pd.DataFrame.from_dict(ex_dic,orient='index')
In [60]: df['Mult'] = df['X'] * df['Weight']
In [62]: df['SumWeight'] = df['Weight'].sum()
In [63]: df
Out[63]:
X Weight Mult SumWeight
1 10 100 1000 800
2 20 200 4000 800
3 35 500 17500 800
现在我们有了DataFrame。现在我想添加一个包含以下值的新列,但我们可以以最有效的方式添加。
所以这就是我想要的第1行,取出100的重量。
In [69]: (df['Mult'] / (df['SumWeight'] - 100)).sum()
Out[69]: 32.142857142857146
第2行,取出200的重量
In [70]: (df['Mult'] / (df['SumWeight'] - 200)).sum()
Out[70]: 37.5
第3行,取出500重量
In [71]: (df['Mult'] / (df['SumWeight'] - 500)).sum()
Out[71]: 75.0
所以我正在寻找一种矢量化方式,现在将其作为新的DataFrame:
In [74]: df
Out[74]:
X Weight Mult SumWeight NewCol
1 10 100 1000 800 32.142857
2 20 200 4000 800 37.500000
3 35 500 17500 800 75.000000