我正在尝试使用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


但是,当我将此代码复制到要构建的实际报告中时,“ Area”列中的内容等同于Those Guys/Those Guys。它不会删除重复的数据。

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

有什么想法可以做得更好或找出数据出了什么问题吗?

最佳答案

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

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

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

学过的知识。再次。

08-19 10:05