我的数据框看起来像:
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'
答案 0 :(得分:0)
如果您只想要唯一值的数量,那很简单:
inboxinsights.groupby('date').agg({'app_id': 'nunique', 'subproduct': 'nunique'})
返回:
但看起来你想要列出那些实际上是什么。我发现this other SO question有帮助:
not_unique_inboxinsights = groupby('date').agg(lambda x: tuple(x))
然后你说要既要独特也要不要独特。为此,我将制作两个groupby数据帧并将它们连接起来,如下所示:
unique_inboxinsights = groupby('date').agg(lambda x: set(tuple(x)))
希望有所帮助。