【发布时间】:2019-08-21 12:14:09
【问题描述】:
我看过 Pandas 的 aggregate 函数的示例,但这些并不能解决我的问题。因为聚合函数的示例要么对所有属性求和,要么只对少数属性求和,结果df 仅具有这些求和属性或groupby 中使用的属性。就我而言,我不想为 group by 或 sum 使用某些属性,但仍将它们保留在结果 df 中。
我正在尝试对一些属性进行分组和求和,同时保留其他未求和但面临挑战的属性,如下所述。
在我的交易数据集中,Customer_ID 对于每个客户都是唯一的,entry time 对于每笔交易都是唯一的。任何客户在一段时间内都会有多次交易。大多数交易会重复两次或更多次,具体取决于与交易相关联的标签数量(但通常是 2 到 4 个标签)。我需要将每个事务的多个条目组合到只有 1 行,1 个 customer_ID,一个 gender,age,entry time,location,country 和所有 Tag 属性。
如果我仅按 customer_ID、entry time 分组并对 标签 求和,则生成的数据框具有正确数量的唯一客户:150K。但是我在结果df中丢失了gender、age、location、country、exit time、value 1、value 2的属性。
result = df.groupby(["customer_ID","entry time"])["Tag1", "Tag2","Tag3","Tag4","Tag5","Tag6","Tag7","Tag8"].sum().reset_index()
如果我按所有需要的属性分组并对 标签 求和,我只能获得 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)?
【问题讨论】:
-
我已经编辑了问题以添加更多详细信息,说明来自 pandas 聚合函数的现有示例如何无法解决我的问题
-
您能否使用
nunique()查看每个["customer_ID","entry time”,"gender", "age","location", "country", "exit time", "value 1", "value 2"]列中唯一值的数量? -
以下是每个属性中的唯一值: Customer_ID = 142973 进入时间 = 1032769 “性别” = 2 “年龄” = 5 “位置” = 23 “国家” = 6 “退出时间” = 1032615 “值 1”= 1589 “值 2” = 252
-
添加分组字段会降低行数实际上很有趣!你确定会发生这种情况吗? Reproducible example(而不是屏幕截图)会很棒。
标签: python pandas dataframe pandas-groupby