我有一个数据集,其中包含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。
答案 0 :(得分:1)
IIUC,首先,您想对每个age
和household
进行汇总:
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