划分和求和映射到每个

2024-09-29 07:30:29 发布

您现在位置:Python中文网/ 问答频道 /正文

所以这个解释有点混乱,所以我希望这个例子能有所帮助。我要做的是得到数据帧中每一行对加权平均值的贡献。要做到这一点,我需要一个列来显示如果我们将值乘以权重除以(权重之和-此行的权重),所有行的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

现在我们有了数据帧。现在我想用下面的值添加一个新列,但要以最有效的方式。你知道吗

这是我想要的第一排,去掉100作为它的重量。你知道吗

In [69]: (df['Mult'] / (df['SumWeight'] - 100)).sum()
Out[69]: 32.142857142857146

第二排,取出200作为它的重量

In [70]: (df['Mult'] / (df['SumWeight'] - 200)).sum()
Out[70]: 37.5

第三排,去掉500的重量

In [71]: (df['Mult'] / (df['SumWeight'] - 500)).sum()
Out[71]: 75.0

因此,我正在寻找一种矢量化的方法,将其作为新的数据帧:

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

Tags: 数据方法indfout例子ex平均值