使用Pandas groupby方法,查找每组中的最大值
通过使用Pandas-groupby,我获得了某些用户在一周中任何一天的平均活动量的数据。按用户和日期分组,我计算过去30天内几个用户的最大值和平均值 现在我想找出,对于每个用户,一周中的哪一天对应于他们的每日最大活动量,以及该活动的平均量是多少 熊猫执行这种任务的方法是什么 原始数据如下所示:使用Pandas groupby方法,查找每组中的最大值,pandas,Pandas,通过使用Pandas-groupby,我获得了某些用户在一周中任何一天的平均活动量的数据。按用户和日期分组,我计算过去30天内几个用户的最大值和平均值 现在我想找出,对于每个用户,一周中的哪一天对应于他们的每日最大活动量,以及该活动的平均量是多少 熊猫执行这种任务的方法是什么 原始数据如下所示: userID countActivity weekday 0 3 25 5 1 3 58 6 2 3
userID countActivity weekday
0 3 25 5
1 3 58 6
2 3 778 0
3 3 78208 1
4 3 6672 2
countActivity
maxDaily meanDaily
userID weekday
3 0 84066 18275.6
1 78208 20698.5
2 172579 64930.75
3 89535 25443
4 6152 2809
包含这些组的对象是通过以下方式创建的:
aggregations = {
'countActivity': {
'maxDaily': 'max',
'meanDaily': 'mean'
}
}
dailyAggs = df.groupby(['userID','weekday']).agg(aggregations)
groupby对象如下所示:
userID countActivity weekday
0 3 25 5
1 3 58 6
2 3 778 0
3 3 78208 1
4 3 6672 2
countActivity
maxDaily meanDaily
userID weekday
3 0 84066 18275.6
1 78208 20698.5
2 172579 64930.75
3 89535 25443
4 6152 2809
Pandas groupby method
filter
在这里似乎是需要的,但我不知道如何继续。我首先在'userID'
上执行groupby
,然后编写应用
函数来完成其余的工作。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
我首先在
'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
您能否提供可复制样本输入数据集和所需数据集?您能否提供可复制样本输入数据集和所需数据集?