使用Pandas groupby方法,查找每组中的最大值

使用Pandas groupby方法,查找每组中的最大值,pandas,Pandas,通过使用Pandas-groupby,我获得了某些用户在一周中任何一天的平均活动量的数据。按用户和日期分组,我计算过去30天内几个用户的最大值和平均值 现在我想找出,对于每个用户,一周中的哪一天对应于他们的每日最大活动量,以及该活动的平均量是多少 熊猫执行这种任务的方法是什么 原始数据如下所示: userID countActivity weekday 0 3 25 5 1 3 58 6 2 3

通过使用Pandas-groupby,我获得了某些用户在一周中任何一天的平均活动量的数据。按用户和日期分组,我计算过去30天内几个用户的最大值和平均值

现在我想找出,对于每个用户,一周中的哪一天对应于他们的每日最大活动量,以及该活动的平均量是多少

熊猫执行这种任务的方法是什么

原始数据如下所示:

    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

您能否提供可复制样本输入数据集和所需数据集?您能否提供可复制样本输入数据集和所需数据集?