簡體   English   中英

加權平均值 dataframe 和 pandas

[英]Weighted mean dataframe with pandas

我遇到了一堆其他加權平均 pandas 問題,但似乎沒有一個能做我想做的事情。 我有以下 df:

      Primary_Key     Team     Quantity   Value 1    Value 2
0         A           Blue      10          20          10
1         B           Red       5           19          30
2         C          Green      8           13          29
3         D           Blue      12          24          18
4         E           Red       15          25          19
5         F          Green      12          18          23

我正在嘗試計算每個團隊的每個值的加權平均值,因此我會得到以下 result_df:

        Team     Quantity   Value 1    Value 2
0       Blue      10        20*10/22    10*10/22
1        Red       5        19*5/20     30*5/20
2       Green      8        13*8/20     29*8/20
3        Blue      12       24*12/22    18*12/22
4        Red       15       25*15/20    19*15/20
5       Green      12       18*12/20    23*12/20

其中 Value 列下的每個條目都對它們進行了以下計算:

weighted_mean = value * (數量/團隊總數量)

我在想我必須以某種方式使用 the.apply(lambda x:...) function 但我不知道如何輕松獲得團隊總量的值。 我也遇到了 numpy.average function 但我認為它在這里沒有用。

任何幫助將非常感激!

分解為以下步驟:

import pandas as pd
import numpy as np

df = pd.DataFrame(data={
    'Primary_Key': list('ABCDEF'),
    'Team': ['Blue', 'Red', 'Green', 'Blue', 'Red', 'Green'],
    'Quantity': [10,5,8,12,15,12],
    'v1': [20,19,13, 24,25,18],
    'v2': [10,30,29,18,19,23]})

df['GroupQuantity'] = df.groupby('Team')['Quantity'].transform(np.sum)

df['v1'] = df['Quantity'] * df['v1'] / df['GroupQuantity']
df['v2'] = df['Quantity'] * df['v2'] / df['GroupQuantity']

df
Primary_Key   Team  Quantity         v1         v2
0           A   Blue        10   9.090909   4.545455
1           B    Red         5   4.750000   7.500000
2           C  Green         8   5.200000  11.600000
3           D   Blue        12  13.090909   9.818182
4           E    Red        15  18.750000  14.250000
5           F  Green        12  10.800000  13.800000

現在,如果您正在尋找一個班輪,您可以這樣做:

df[['v1', 'v2']] = df[['v1', 'v2']] * df['Quantity'].to_numpy()[:,None] /  df.groupby('Team')['Quantity'].transform(np.sum).to_numpy()[:,None]

df
Primary_Key   Team  Quantity         v1         v2
0           A   Blue        10   9.090909   4.545455
1           B    Red         5   4.750000   7.500000
2           C  Green         8   5.200000  11.600000
3           D   Blue        12  13.090909   9.818182
4           E    Red        15  18.750000  14.250000
5           F  Green        12  10.800000  13.800000

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM