Python 3.x 使用多列聚合大数据帧
假设我有以下数据帧:Python 3.x 使用多列聚合大数据帧,python-3.x,pandas,aggregate,Python 3.x,Pandas,Aggregate,假设我有以下数据帧: import pandas as pd df = pd.DataFrame({'user': ['00001C05', '00001C05', '00001C05', '00007142'], 'mois_couverture': ['01-2018', '01-2018', '02-2018', '01-2018'], 'categorie_A': ['x', 'x', 'x', 'y'], 'categ
import pandas as pd
df = pd.DataFrame({'user': ['00001C05', '00001C05', '00001C05', '00007142'],
'mois_couverture': ['01-2018', '01-2018', '02-2018', '01-2018'],
'categorie_A': ['x', 'x', 'x', 'y'],
'categorie_B': ['v', 'v', 'v', 'w'],
'revenue': [40, 50, 40, 100]})
user mois_couverture categorie_A categorie_B revenue
0 00001C05 01-2018 x v 40
1 00001C05 01-2018 x v 50
2 00001C05 02-2018 x v 40
3 00007142 01-2018 y w 100
现在,我想使用所有其他列作为id列聚合列revenue
对于这里的这个玩具示例,只需:
df.groupby(['user', 'mois_couverture', 'categorie_A', 'categorie_B'])['revenue'].sum()
user mois_couverture categorie_A categorie_B
00001C05 01-2018 x v 90
02-2018 x v 40
00007142 01-2018 y w 100
然而,在我的例子中,这是不可行的,因为数据帧非常大,而且还有很多列,比如categorie\u A
和categorie\u B
。好消息是:这些列中的值对于单个用户通常不会改变df.groupby
仍然试图创建所有这些列的笛卡尔乘积,这使得计算变得不可能
有效地执行此操作的最佳方法是什么?您想这样做吗-
col_list = list(df.columns.values)
col_list.remove('revenue')
df.groupby(col_list)['revenue'].sum()
分组数据帧的索引似乎非常大 只是一个想法:您可以创建临时列,在其中计算要分组的列的哈希,然后在此列上分组。例如:
df[“tmp”]=df[“用户”、“操作界面”、“类别A”、“类别B”]。申请(
lambda x:hash(元组(x)),轴=1
)
x=df.groupby(“tmp”).first()
x、 更新(df.groupby(“tmp”)[“收入”].sum())
打印(x)
印刷品:
user mois\u couverture category\u A category\u B收入
tmp
-7695693783280321891 00007142 01-2018 y w 100
-3471124568195598737 00001C05 01-2018 x v 90
760801592157661100 00001C05 02-2018 x v 40
原则上是的。但这也给了我:MemoryError:似乎无法分配3.78 PiB来尝试创建一些笛卡尔产品。