使用Pandas groupby方法,在每个组中找到最大值
问题描述:
通过使用Pandas groupby,我得到了某些用户平均每周某一天有多少活动的数据。按用户和天分组,我计算了过去30天内几个用户的最大值和平均值。使用Pandas groupby方法,在每个组中找到最大值
现在我想要为每个用户找到一周中的哪一天对应其日常最大活动,以及该活动的平均幅度。
大熊猫执行这样的任务的方法是什么?
原始数据看起来是这样的:
userID countActivity weekday
0 3 25 5
1 3 58 6
2 3 778 0
3 3 78208 1
4 3 6672 2
具有这些团体的对象从创建如下:
aggregations = {
'countActivity': {
'maxDaily': 'max',
'meanDaily': 'mean'
}
}
dailyAggs = df.groupby(['userID','weekday']).agg(aggregations)
的GROUPBY物体看起来是这样的:
countActivity
maxDaily meanDaily
userID weekday
3 0 84066 18275.6
1 78208 20698.5
2 172579 64930.75
3 89535 25443
4 6152 2809
熊猫groupby方法filter
似乎需要在这里,但我很难过如何继续。
答
我首先在'userID'
上做一个groupby
,然后编写一个apply
函数来完成剩下的工作。 apply
函数将采用'userID'
组,然后在'weekday'
上执行另一个groupby
来完成您的聚合,然后仅返回包含maxDaily
的最大值的行,可以通过argmax
找到该行。
def get_max_daily(grp):
aggregations = {'countActivity': {'maxDaily': 'max', 'meanDaily': 'mean'}}
grp = grp.groupby('weekday').agg(aggregations).reset_index()
return grp.loc[grp[('countActivity', 'maxDaily')].argmax()]
result = df.groupby('userID').apply(get_max_daily)
我添加一行到您的样本数据,以确保每天聚集了正常工作,因为你的样本数据只包含每个工作日一个条目:
userID countActivity weekday
0 3 25 5
1 3 58 6
2 3 778 0
3 3 78208 1
4 3 6672 2
5 3 78210 1
输出结果:
weekday countActivity
meanDaily maxDaily
userID
3 1 78209 78210
您能否提供可重现的样本输入数据集和所需的数据集? – MaxU