Pandas除法和求和映射在每一行

时间:2015-10-14 16:39:37

标签: python pandas

所以这个解释有点令人困惑,所以我希望这个例子会有所帮助。我想要做的是获得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

0 个答案:

没有答案