分组依据创建按日期显示的唯一值,以及按日期显示的非唯一值

时间:2016-03-30 13:48:56

标签: python pandas unique grouping

我的数据框看起来像:

    app_id   subproduct date    
0    23        3        2015-05-29
1    23        4        2015-05-29     
2    25        5        2015-05-29
3    23        3        2015-05-29
4    24        7        2015-05-29
....

我跑:

groupings =insightevents.groupby([insightevents['created_at_date'].dt.year,\
            insightevents['created_at_date'].dt.month,\
                        insightevents['created_at_date'].dt.week,insightevents['created_at_date'].dt.day,
            insightevents['created_at_date'].dt.dayofweek]);

inboxinsights=pd.DataFrame([groupings['app_id'].unique(),groupings['subproduct'].unique()]).transpose()

这给了我:

                    app_id    subproduct
2015 5 22 29 4     [23,24,25]  [3,4,5,7]

但是,我想要的实际上并不是只获取唯一值,而是整个app_ids和sub_product当天作为附加列加载,所以:

               unique_ app_id  unique_subproduct subproduct app_id
2015 5 22 29 4     [23,24,25]  [3,4,5,7]         [3,3,4,5,7] [23,23,23,24,25]  

我发现这样做:

inboxinsights=pd.DataFrame([groupings['app_id'].unique(), groupings['subproduct'].unique(),groupings['app_id'],groupings['subproduct']]).transpose()

没有工作,只是给了我:

AttributeError: 'Series' object has no attribute 'type'

1 个答案:

答案 0 :(得分:0)

如果您只想要唯一值的数量,那很简单:

inboxinsights.groupby('date').agg({'app_id': 'nunique', 'subproduct': 'nunique'})

返回:

just the number of uniques

但看起来你想要列出那些实际上是什么。我发现this other SO question有帮助:

not_unique_inboxinsights = groupby('date').agg(lambda x: tuple(x))

enter image description here

然后你说要既要独特也要不要独特。为此,我将制作两个groupby数据帧并将它们连接起来,如下所示:

unique_inboxinsights = groupby('date').agg(lambda x: set(tuple(x)))

concatenated together

希望有所帮助。