首页 > 解决方案 > 使用 groupby 作为用户 ID 并组合字符串

问题描述

我在预处理数据时遇到问题。我有看起来像的数据

我想按一个表示名为帐号的用户的字段进行分组,并且我想创建一个新字段,该字段是每个帐号的客户事件类型的所有值的串联。

我试过这个:

df_by_accnum = df.groupby('Account Number')[['Customer Event Type']].agg(','.join).reset_index()

但它会导致连接所有列名而不是 hte 值(https://i.imgur.com/VR5JjC3.png

我能得到一些帮助解决这个问题吗?谢谢

标签: pythonpandasdataframegroup-bypreprocessor

解决方案


通过尝试和错误,我发现这可能是由于Customer Event Type列的类型。我猜它可能包含非字符串值,这是join假设的,并且由于某种原因,使用了列名。

尝试创建一个将客户事件类型转换为字符串的新列并使用该列:

>>> d = {'Account Number': [1, 2, 3, 1], 'Customer Event Type': [1, 1, 2, 2]}
>>> df = pd.DataFrame(data=d)
>>> df['Customer Event Type str'] = df['Customer Event Type'].astype(str)
>>> df.groupby('Account Number')[['Customer Event Type str']].agg(','.join).reset_index()
   Account Number Customer Event Type str
0               1                     1,2
1               2                       1
2               3                       2

而使用数字列会产生:

>>> df.groupby('Account Number')[['Customer Event Type']].agg(','.join).reset_index()
   Account Number                                Customer Event Type
0               1  Account Number,Customer Event Type,Customer Ev...
1               2  Account Number,Customer Event Type,Customer Ev...
2               3  Account Number,Customer Event Type,Customer Ev...

希望能帮助到你。如果您找出这种行为的原因,请告诉我们。谢谢!


推荐阅读