熊猫:用groupby制作一张桌子

时间:2016-08-11 16:06:44

标签: python pandas

我有数据框

i,Unnamed: 0,ID,active_seconds,subdomain,search_term,period,code,buy    
0,56574,08cd0141663315ce71e0121e3cd8d91f,6,market.yandex.ru,None,515,100.0,1.0  
1,56576,08cd0141663315ce71e0121e3cd8d91f,26,market.yandex.ru,None,515,100.0,1.0 
2,56578,08cd0141663315ce71e0121e3cd8d91f,14,market.yandex.ru,None,515,100.0,1.0 
3,56579,08cd0141663315ce71e0121e3cd8d91f,2,market.yandex.ru,None,515,100.0,1.0  
4,56581,08cd0141663315ce71e0121e3cd8d91f,8,market.yandex.ru,None,515,100.0,1.0  
5,56582,08cd0141663315ce71e0121e3cd8d91f,32,market.yandex.ru,None,515,100.0,1.0 
6,56583,08cd0141663315ce71e0121e3cd8d91f,16,market.yandex.ru,None,515,100.0,1.0 
7,56584,08cd0141663315ce71e0121e3cd8d91f,4,market.yandex.ru,None,515,100.0,1.0  
8,56585,08cd0141663315ce71e0121e3cd8d91f,10,market.yandex.ru,None,515,100.0,1.0 
9,56639,08cd0141663315ce71e0121e3cd8d91f,2,market.yandex.ru,None,516,100.0,1.0  

我希望获得active_secondsperiod的数量的总和(一个数字是一个句号)。在这种情况下,我希望将句点数量2提供给此ID。 我用

df.groupby(['ID', 'buy']).agg({'period': len, 'active_seconds': sum}).rename(columns={'active_seconds': 'count_sec', 'period': 'sum_session'}).reset_index()

但它会对期间的数量返回不正确的价值。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

使用'nunique'代替len

df.groupby(['ID', 'buy']).agg({'period': 'nunique', 'active_seconds': sum}) \
    .rename(columns={'active_seconds': 'count_sec', 'period': 'sum_session'}).reset_index()

enter image description here