在pandas.groupby之后删除重复的值

时间:2019-12-20 19:21:12

标签: python pandas dataframe pandas-groupby

我正在尝试使用str.join方法将数据集中的三列分组:

df = pd.DataFrame([[1,'company', 'This', 'Them', 'Those Guys'],
                   [2,'agency', 'That', 'Other', 'These Guys'],
                   [2, 'agency', 'This', 'Them', 'Those Guys'],
                   [1, 'company', 'It', 'They', 'Those Guys']],
                  columns=['Acct', 'AcctName', 'Dude', 'Boss', 'Area'])

g = df.groupby(by=['Acct', 'AcctName'])

pd.concat([g['Dude'].apply('/'.join),
           g['Boss'].apply('/'.join),
           g['Area'].apply(lambda x: '/'.join(sorted(set(x))))],
          axis=1).reset_index()

这会在我的测试数据中产生预期的结果:

 Acct   AcctName    Dude    Boss    Area
0   1   company This/It Them/They   Those Guys
1   2   agency  That/This   Other/Them  These Guys/Those Guys

但是,当我将此代码复制到要构建的实际报告中时,“区域”列的内容与Those Guys/Those Guys相当。并不是要删除重复的数据。

我尝试添加df['Area'] = df['Area'].transform(str.strip) 在对数据框进行分组之前,但这并不能解决问题(多余的空格是我数据处理生命的祸根!)。

有什么主意我可以做得更好或者弄清楚数据出了什么问题吗?

2 个答案:

答案 0 :(得分:1)

Mea culpa。再次。我纯粹是一个命名问题。

我正在Juypter笔记本中进行开发,并在一个单元中读取数据,然后在下一个单元中进行实际处理。该特定单元进行了分组和连接。

我没有做什么?给连接的数据框起一个新的名字。因此它从一开始就起作用了,但是因为我使用的是相同的变量名,所以Those Guys/Those Guys的值位于数据帧的单个单元格中,而不是由数据框。

教训。再次。

答案 1 :(得分:0)

尝试使用.agg()代替.apply()

pd.concat([g['Dude'].agg('/'.join),
           g['Boss'].agg('/'.join),
           g['Area'].agg(lambda x: '/'.join(sorted(set(x))))],
          axis=1).reset_index()