【发布时间】:2021-12-16 14:49:04
【问题描述】:
我有一个数据框:
date id type revenue
0 2021-09-01 Zw b1 20.045350
1 2021-09-01 Aw c 8.990000
2 2021-09-01 Zc c 14.990000
3 2021-09-01 ww b 25.944510
4 2021-09-01 jw c 3.881649
5 2021-09-01 pw b 9.990000
6 2021-09-01 fg c 2.990000
7 2021-09-01 kl b 4.990000
8 2021-09-02 mm b 7.990000
我想计算每种类型的平均收入,但不是在类型组中,而是在日期组中。因此,例如平均类型“b1”必须不是 20.045350(因为只有一种 b1 类型),而是 20.045350/8 = 2.5(因为日期列中有 8 个 2021-09-01 值)。所以期望的结果必须是:
date type revenue
0 2021-09-01 b1 2.5
0 2021-09-01 c 3.85
0 2021-09-01 b 5.11
0 2021-09-02 b 7.990000
如何做到这一点? groupby("date", "type").mean() 带来错误结果:
date type revenue
0 2021-09-01 b1 20.045
0 2021-09-01 c 7.71
0 2021-09-01 b 13.64
0 2021-09-02 b 7.990000
【问题讨论】:
-
第二个3.85怎么样?你能解释一下吗?你能解释一下5.11吗?
-
@Onyambu 3.85 来自 (8.99+14.99+3.88+2.99)/8 。 8 是日期组 2021-09-01 中的行数
-
df.groupby('date')['id'].count().reset_index().rename({'id':'count'}, axis = 1).merge(df).pipe(lambda x: x.assign(revenue = x.revenue/x['count'])).groupby(['date','type']).agg({'revenue':sum}).reset_index() -
@Onyambu 它没有计算 2021-09-02 组的结果
-
我发布了分析器。它确实计算了 2021-09-02 的结果。我不知道你想表达什么意思。检查我发布的答案
标签: python python-3.x pandas group-by mean