Pandas计算各组间唯一数字的平均数

2024-06-17 11:00:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据集,其中包含家庭密钥、年龄组、收入组和日期列。对于每个家庭,每个家庭去购物的每一天都有一排。我想找出平均每个年龄组在研究期间购物的天数。我试着按年龄组分组并计算唯一日期的数量,但我想得到每个组中每个家庭的唯一日期,而不仅仅是每个组中的唯一日期,然后我想得到平均值和标准差之类的东西。我试过:

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

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

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

但这让我每户都有一组(每户都是一个年龄组)。那我就不知道怎么按年龄组来获取信息了。我想做一些多层次的小组,但我不知道怎么做。我在python3中使用熊猫


Tags: 数据falsedfageindexas家庭group
2条回答

IIUC,首先要对每个agehousehold进行聚合:

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

然后再用groupby表示平均值,例如

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

将给出household_key中每个age_group的平均值

如果我正确理解你想要达到的目标,你可以尝试以下方法:

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

相关问题 更多 >