我已经看到了熊猫aggregate
功能的例子,但是这些并不能解决我的问题。由于集合函数的示例将所有属性加总或仅将几个属性加总,因此结果df
仅具有这些加总的属性或在中使用的属性groupby
。就我而言,我不想为group by或sum使用某些属性,而仍将它们保留在result中df
。
我正在尝试对一些属性进行分组和汇总,同时保留其他未汇总的属性,但面临如下所述的挑战。
在我的交易数据集中,Customer_ID
每个客户entry time
都是唯一的,每个交易都是唯一的。任何客户在一段时间内都会进行多次交易。大多数事务重复两次或更多次,具体取决于与事务关联的标签数量(但通常为2到4个标签)。我需要每个交易等多个项目结合起来,只有1行,1 customer_ID
,一个gender
,age
,entry time
,location
,country
和所有的标签属性。
如果仅按进行分组customer_ID
,entry time
然后对Tag求和,则结果数据框将具有正确的唯一客户数量:150K。但我失去的属性gender
,age
,location
,country
,exit time
,value 1
,value 2
在由此而来df
。
result = df.groupby(["customer_ID","entry time"])["Tag1", "Tag2","Tag3","Tag4","Tag5","Tag6","Tag7","Tag8"].sum().reset_index()
如果我按所有必需的属性分组并汇总Tag,则我只能获得90K唯一客户,这是不正确的。
result = df.groupby(["customer_ID", "entry time", "gender", "age","location", "country", "exit time", "value 1", "value 2"
])["Tag1","Tag2","Tag3","Tag4","Tag5","Tag6","Tag7","Tag8"].sum().reset_index()
那么,如何有效地仅对customer_ID
和进行分组entry time
,对所有Tag
列求和,并仍然保留结果中的其他属性df
(df大小约为700 MB)?
从技术上讲,您正在尝试汇总唯一的customer_ID和输入时间(不是唯一的客户)。为了保持其他属性,必须做出一些汇总决定以保留哪些值。考虑延伸的groupby().aggregate
调用来检索first
,last
,min
或max
值。
agg_df = (df.groupby(['customer_ID', 'entry time'], as_index=False)
.aggregate({'gender':'first', 'age':'first',
'location':'first', 'country':'first',
'exit time':'first', 'value 1':'first', 'value 2':'first',
'Tag1':'sum', 'Tag2':'sum', 'Tag3':'sum', 'Tag4':'sum',
'Tag5':'sum', 'Tag6':'sum', 'Tag7':'sum', 'Tag8':'sum'})
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句