我有一个数据框如下,
date hour staff
0 2019-10-01 6 A
1 2019-10-01 6 B
2 2019-10-01 6 C
3 2019-10-02 6 D
4 2019-10-02 6 B
5 2019-10-02 6 A
6 2019-10-03 6 B
7 2019-10-03 6 B
8 2019-10-03 6 B
9 2019-10-01 7 D
10 2019-10-01 7 A
11 2019-10-01 7 B
12 2019-10-01 7 C
13 2019-10-02 7 D
14 2019-10-02 7 C
15 2019-10-02 7 A
16 2019-10-03 7 B
17 2019-10-03 7 B
18 2019-10-03 7 A
我想计算每小时独特员工的平均值,如下所示
小时 unique_staff
6 2
7 3
说明:
6 点,
Unique_staff = 2
10 月 1 日:3(A,B,C)+ 10 月 2 日:3(D,B,A)+ 10 月 3 日:1 (B) = 3+3+1=7/3(唯一日期数量)~2
7 点,
Unique_staff = 3
10月1日: 4(D,A,B,C)+ 10月2日: 3(D,C,A)+ 10月3日: 2 (B, A) = 4+3+2=9/3(唯一的数量日期)~3
最佳答案
df.groupby(['hour', 'date'])['staff'].nunique().reset_index()\
.groupby('hour')['staff'].mean().round()
>>> output
6 2.0
7 3.0
编辑:
评论中anky_91的解决方案要快得多,绝对应该使用:
df.groupby(['date','hour'])['staff'].nunique().mean(level=1).round()
关于python - 按一列分组并找到编号。另一列中的唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59222797/