我正在尝试使用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
的值位于数据帧的单个单元中,而不是由数据帧中的值生成的。
学过的知识。再次。