【发布时间】:2015-07-28 05:10:00
【问题描述】:
我现在遇到了在 pandas 中计算组加权平均值的问题。
假设数据框有 3 列“Group”、“A”和“W”。如果我想找到 A 的组均值,我会这样做
df.groupby(['Group'])['A'].mean()
或者如果我需要整体加权平均,我可以这样做
np.average(df.A,weight=df.W)
但是我可以计算每个组的加权平均值吗?
谢谢!
【问题讨论】:
我现在遇到了在 pandas 中计算组加权平均值的问题。
假设数据框有 3 列“Group”、“A”和“W”。如果我想找到 A 的组均值,我会这样做
df.groupby(['Group'])['A'].mean()
或者如果我需要整体加权平均,我可以这样做
np.average(df.A,weight=df.W)
但是我可以计算每个组的加权平均值吗?
谢谢!
【问题讨论】:
您可以将 groupby/apply 与自定义 (lambda) 函数一起使用:
import numpy as np
import pandas as pd
np.random.seed(2015)
N = 10000
df = pd.DataFrame(np.random.randint(10, size=(N,3)), columns=['Group', 'A', 'W'])
result = df.groupby(['Group']).apply(lambda x: np.average(x['A'], weights=x['W']))
print(result)
产量
Group
0 4.422978
1 4.557099
2 4.517336
3 4.535559
4 4.526898
5 4.697104
6 4.580512
7 4.598492
8 4.388965
9 4.424191
dtype: float64
【讨论】:
df.resample 需要 df 有 DatetimeIndex、PeriodIndex 或 TimedeltaIndex。
.agg() 来做到这一点,所以它也适用于多列?