我有一个如下数据集,存储在pd.DataFrame
对象:
df
topic student level week
1 sun a 1 1
1 sun b 2 1
1 moon a 3 1
2 tree a 1 2
2 tree b 2 2
2 tree a 3 2
2 tree b 4 2
3 cloud c 1 2
3 cloud b 2 2
3 cloud c 3 2
3 cloud a 4 2
3 house b 5 2
我想将每个包含id
列的列聚合为学生数和消息数。
id topic num_students num_messages
1 sun 2 2
1 moon 1 1
2 tree 2 4
3 cloud 3 4
3 house 1 1
其中num_students
是每个ID /主题对student
中唯一df1
的数量,num_messages
个ID /主题对的数量。
有人有想法吗?
答案 0 :(得分:1)
d = {'nunique':'num_students','size':'num_messages'}
df1 = (df.groupby(['id','topic'], sort=False)['student']
.agg(['nunique','size'])
.rename(columns=d)
.reset_index())
print (df1)
id topic num_students num_messages
0 1 sun 2 2
1 1 moon 1 1
2 2 tree 2 4
3 3 cloud 3 4
4 3 house 1 1