我正在尝试使用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)
在对数据框进行分组之前,但这并不能解决问题(多余的空格是我数据处理生命的祸根!)。
有什么主意我可以做得更好或者弄清楚数据出了什么问题吗?
答案 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()