使用groupby作为用户ID并组合字符串

时间:2019-08-02 21:12:59

标签: python pandas dataframe group-by preprocessor

我在预处理数据时遇到了麻烦。我的数据看起来像

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

我已经尝试过了:

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

但是会导致所有列名被串联,而不是串联值(https://i.imgur.com/VR5JjC3.png

我可以帮忙解决这个问题吗?谢谢

1 个答案:

答案 0 :(得分:0)

通过尝试和错误,我发现这可能是由于客户事件类型列的类型造成的。我猜它可能包含 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...

希望有帮助。如果您找出这种现象的原因,请告诉我们。谢谢!