首页 > 解决方案 > 在 Pandas 数据框中使用 groupby,但它会创建具有相同值的多行

问题描述

我有一个包含 3 列的数据框,让标题、区域、代码。有不同的值,包括相同标题的区域和代码列中的空白。我想将所有这些区域值和用空格分隔的代码组​​合起来,这样一个标题就有一行。我尝试使用代码执行此操作

df['area']=df['area'].replace("\\N",np.nan)
df['code']=df['code'].replace("\\N",np.nan)
df['area'] =df['area'].fillna('')
df['code'] =df['code'].fillna('')
df[['area','code']] = df.groupby(['title'])[['area','code']].transform(lambda x: ' '.join(x))

我得到了我想要的,但是这段代码正在创建具有相同数据的多行。例如,如果我的数据集如下所示:

title   area    code
a       yv       f
a       ty       \N
a       dz       r
b       yv       \N
b       \N       f
c       dz       f

然后我希望我的输出是:

title   area          code
a       yv ty dz       f r
b       yv dz          f
c       dz             f

但是我得到 3 个重复的 a 行,2 个 b 和 1 个 c 包含相同的值。我可以稍后删除重复值,但我的数据框非常大(包含大约 240 万行),我无法执行此命令:

df[['area','code']] = df.groupby(['title'])[['area','code']].transform(lambda x: ' '.join(x))

为了它。因此,如果我可以并排删除重复值会很有帮助,这样就不会占用太多 RAM 来处理。或者任何其他解决方案也会有所帮助。提前致谢!

标签: pandasdataframe

解决方案


有几种方法可以做到这一点。最简单的方法(IMO)是:

df = df.groupby(['title']).agg(" ".join).reset_index()

你也可以看到这个类似的问题。


推荐阅读