[英]Python Pandas Groupby Multiple Level
我有一个如下所示的数据框:
天 | 类别 | 销售量 |
---|---|---|
2021-01-01 | 一个 | 1 |
2021-01-01 | 乙 | 5 |
2021-01-02 | 一个 | 2 |
2021-01-02 | 乙 | 3 |
2021-01-03 | 一个 | 4 |
2021-01-03 | 乙 | 1 |
2021-01-04 | 一个 | 3 |
2021-01-04 | 乙 | 5 |
我想得到这样的东西
天 | 类别 | 销售量 | sales_ix |
---|---|---|---|
2021-01-01 | 一个 | 1 | 0.40 |
2021-01-01 | 乙 | 5 | 1.43 |
2021-01-02 | 一个 | 2 | 0.80 |
2021-01-02 | 乙 | 3 | 0.86 |
2021-01-03 | 一个 | 4 | 1.60 |
2021-01-03 | 乙 | 1 | 0.29 |
2021-01-04 | 一个 | 3 | 1.20 |
2021-01-04 | 乙 | 5 | 1.43 |
最后一列是每日销售额除以按类别划分的平均每日销售额(A = 2.5 & b = 3.5 的平均销售额)。
我努力了
df['sales_ix'] = df['sales'].apply(lambda x: x/df.groupby('category').mean()['sales'])
,但它没有用。
有人知道如何将最后一列添加到 df 吗?
尝试这个:
df['sales_ix'] = df.groupby('category')['sales'].transform(lambda x: x.div(x.mean()))
示例 dataframe:
df = pd.DataFrame({
'day': list('12341234'),
'category': list('aaaabbbb'),
'sales':[1,2,3,4,5,6,7,8]
})
为了使聚合结果与 dataframe 兼容,需要设置正确的索引:
df = df.set_index(['category'])
现在我们可以将类别平均值添加到 dataframe 中:
df['category_mean'] = df.groupby(['category'])['sales'].mean()
最后,我们计算目标列:
df['sales_ix'] = df['sales'] / df['category_mean']
或者,从索引中恢复category
列:
df.reset_index()
您可以使用groupby
- transform
:
result = (
df.assign(
sales_ix=df.groupby('category')['sales']
.transform(lambda x: x / x.mean())
)
)
如果只有两个类别,您可以使用 np.where
您可以事先获得类别的手段,但您也可以像这样在单行中做到这一点
df['sales_ix'] = np.where(
df['category'] == 'A',
df['sales'] / df[df['category'] == 'A']['sales'].mean(),
df['sales'] / df[df['category'] == 'B']['sales'].mean()
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.