熊猫数据透视表给我聚合错误

时间:2019-05-06 17:23:10

标签: pandas pivot pivot-table

具有如下所示的数据框:

      Unique_ID    Due_Date                     Provider
0           731   3/05/2019         Optus Mobile Pty Ltd
1           733   3/05/2019         Optus Mobile Pty Ltd
2           747  23/04/2019         Optus Mobile Pty Ltd
3           747  21/04/2019         Optus Mobile Pty Ltd
4           747  17/04/2019         Optus Mobile Pty Ltd

我想执行pivot_table以达到以下目的:

      Unique_ID    Due_Date_1                   Provider_1    Due_Date_2  Provider_2              Due_Date_3  Provider_3
0           731    3/05/2019          Optus Mobile Pty Ltd
1           733    3/05/2019          Optus Mobile Pty Ltd
2           747    23/04/2019         Optus Mobile Pty Ltd    21/04/2019  Optus Mobile Pty Ltd    17/04/2019  Optus Mobile Pty Ltd

我正在尝试如下操作:

df.pivot_table(index=['Unique_ID'], columns='Due_Date', values='Provider')

但是我得到了很多错误。

pandas.core.base.DataError: No numeric types to aggregate

请注意,这是一个更大的数据集的摘要,并且会有许多Unique_ID要执行。


我需要先执行groupby吗?

1 个答案:

答案 0 :(得分:2)

df['key']=(df.groupby('Unique_ID').cumcount()+1).astype(str)
s=df.pivot_table(index='Unique_ID',columns='key',values=['Due_Date','Provider'],aggfunc='first').sort_index(level=1,axis=1)
s.columns=s.columns.map('_'.join)
s
Out[54]: 
           Due_Date_1 Provider_1  Due_Date_2 Provider_2  Due_Date_3 Provider_3
Unique_ID                                                                     
731         3/05/2019      Optus         NaN        NaN         NaN        NaN
733         3/05/2019      Optus         NaN        NaN         NaN        NaN
747        23/04/2019      Optus  21/04/2019      Optus  17/04/2019      Optus