按ID分组,同时保留所有数据。蟒蛇。大熊猫

时间:2018-09-24 12:39:31

标签: python-3.x pandas pandas-groupby

我有以下数据:

UserId    Date         Action
1       01/01/2018     One
1       02/01/2018     One
1       03/01/2018     Two
1       05/01/2018     Two
2       01/01/2018     One
2       03/01/2018     Three
2       07/01/2018     One
3       04/01/2018     One

我想得到:

UserId      Date_1      Action_1     Date_2       Action_2  (...)  
1         01/01/2018      One      02/01/2018       One
2         01/01/2018      Two      03/01/2018      Three
3         04/01/2018      One        NULL           NULL

有什么提示吗?

2 个答案:

答案 0 :(得分:2)

d = df.set_index(
    ['UserId', df.groupby(['UserId']).cumcount().add(1).astype(str)]
).unstack().sort_index(axis=1, level=1)

d.columns = d.columns.map('_'.join)
d

            Date_1 Action_1      Date_2 Action_2      Date_3 Action_3      Date_4 Action_4
UserId                                                                                    
1       01/01/2018      One  02/01/2018      One  03/01/2018      Two  05/01/2018      Two
2       01/01/2018      One  03/01/2018    Three  07/01/2018      One        None     None
3       04/01/2018      One        None     None        None     None        None     None

答案 1 :(得分:1)

使用pd.concat

s = pd.concat([g.reset_index().unstack() for _, g in df.groupby(['UserId'])], 1)
s = s.reset_index(level=0).T.sort_index(axis=1)
s.columns = s.loc['level_0'] + '_' + s.columns.astype(str)
s = s.iloc[1:,:]