Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 使用多列聚合大数据帧_Python 3.x_Pandas_Aggregate - Fatal编程技术网

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来尝试创建一些笛卡尔产品。