具有如下所示的数据框:
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
吗?
答案 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