熊猫计算各组中唯一数字的平均数

时间:2019-11-19 16:19:59

标签: python pandas pandas-groupby

我有一个数据集,其中包含column_key,age_group,income_group和day列。对于每个家庭,每个家庭每天购物都有一行。我想平均找出研究期间每个年龄段的购物天数。我尝试按年龄组进行分组并计算唯一日期的数量,但是我想获得每个组中每个家庭的唯一日期,而不仅仅是每个组中的唯一日期,然后我想要平均值和标准差之类的东西。我尝试过:

df.groupby('age_group', as_index=False).agg({'DAY': 'nunique'})

但这忽略了家庭,我也尝试过:

df.groupby(['age_group', 'household_key'], as_index=False).agg({'DAY': 'nunique'})

但是,这使我每个家庭一组(每个家庭属于一个年龄组)。然后,我不知道如何按年龄段获取信息。我想做某种多层次的小组活动,但是我不知道怎么做。我在Python 3中使用Pandas。

2 个答案:

答案 0 :(得分:1)

IIUC,首先,您想对每个agehousehold进行汇总:

agg = (df.groupby(['age_group', 'household_key'])
         .agg({'DAY': 'nunique'})
      )

,然后再次按均值分组,例如

agg.groupby('age_group').mean()

将为您提供age_group中每个household_key的平均值。

答案 1 :(得分:0)

如果我正确理解了您想要实现的目标,则可以尝试以下方法:

import pandas as pd
data = {'household_key':[1,1,1,1,2,2,2,3,3,3],
        'age_group':[25,25,25,25,30,30,30,25,25,25],
        'income_group':[40,40,40,40,40,40,40,30,30,30],
        'day':['2019-01-01','2019-01-05','2019-01-08','2019-01-15','2019-01-01','2019-01-08','2019-01-10','2019-01-01','2019-01-05','2019-01-10']}

df = pd.DataFrame(data)
# get group by household
group1 = df.groupby(['household_key', 'age_group']).agg({'day': 'nunique'})
# get group by age_group
group2 = df.groupby(['age_group']).agg({'day': 'nunique'})
# join the results
group = group2.merge(group1, how='right', left_index=True, right_index=True)
group.columns = ['unique_days_in_group', 'unique_days_in_household']
print(group)

结果将是这样的:

                         unique_days_in_group  unique_days_in_household
household_key age_group                                                
1             25                            5                         4
2             30                            3                         3
3             25                            5                         3