首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >按多列对大型数据集进行分组和聚合

按多列对大型数据集进行分组和聚合
EN

Stack Overflow用户
提问于 2019-04-23 03:35:30
回答 1查看 402关注 0票数 2

我尝试按多列对数据进行分组,然后在其他列中聚合值。虽然我在网上找到了许多这样的例子,但当我尝试将相同的实践应用于我的DataFrame时,我遇到了问题。我认为这可能是由于大小(1.5mm+行)。

我有一个包含名称和地址信息的DataFrame,以及两个'source‘列:

代码语言:javascript
运行
复制
In [45]: df
Out[45]:
   Firstname   Lastname       Address     Zip5   Source_A  Source_B
0      'John'    'Smith'    '1 May St'  '10001'         1         0
1       'Lou'    'Brown'  '2 Perry Ln'  '20983'         0         1
2    'Elaine'    'Brown'  '5 Park Ave'  '34785'         1         0
3      'John'    'Smith'    '1 May St'  '10001'         0         1

我希望对具有相似名称和地址信息的行进行分组,然后使用max()函数聚合“源”列。我的代码如下:

代码语言:javascript
运行
复制
In [43]: grouped = df.groupby(['Firstname', 'Lastname', 'Address', 'Zip5'], as_index = False, sort = False)

In [44]: grouped.max()
Out[44]:
   Firstname   Lastname       Address     Zip5   Source_A  Source_B
0      'John'    'Smith'    '1 May St'  '10001'         1         1
1       'Lou'    'Brown'  '2 Perry Ln'  '20983'         0         1
2    'Elaine'    'Brown'  '5 Park Ave'  '34785'         1         0

这个输出正是我想要的--本质上,在['Firstname', 'Lastname', 'Address', 'Zip5']上对行进行了重复数据消除,Source_ASource_B采用了原始数据帧中的最大值。

然而,虽然这适用于较小的DataFrames,但代码无法完成对非常大的数据集(1.5 on行)的运行。大约45分钟前,我在一个大型数据集上运行了这段代码,但它尚未完成。有没有更有效的方法来做到这一点?我也很好奇,为什么简单地用df.duplicated(['Firstname', 'Lastname', 'Address', 'Zip5'], keep = 'last')识别重复项的速度非常快,而groupby却很难做到。

EN

Stack Overflow用户

发布于 2019-04-23 06:05:43

我不知道这是否会更快,因为我不知道是pivot_table还是melt,还是两者的组合都比使用groupby更快,但这里有一个替代解决方案

我使用melt函数将Source_A和Source_B中的值堆叠到一列中

代码语言:javascript
运行
复制
df_melt=pd.melt(df,id_vars=['Firstname','Lastname','Address','Zip5'],value_vars=['Source_A','Source_B'])

然后将数据透视表应用于结果。

代码语言:javascript
运行
复制
df_pivot=df_melt.pivot_table(index=['Firstname','Lastname','Address','Zip5'],columns='variable',aggfunc='max').reset_index()

希望它能帮上忙!

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55800096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档