简体   繁体   中英

Pandas how to pivot/unpivot/add a dummy column name

I want to convert from a long to a wide table with dummy column names created based on the number of accid

sample excel input vs output attached

在此处输入图像描述

Please help

I was able to get down to 2 steps, pivot_table using aggfunc=list , and then creating new columns from that list.

I'm not sure I've come up with what you want though, because the assignment to columns is just filling up from the left.

Create the DataFrame:

so = pd.DataFrame({'AccID': 'B1 B2 B3 B4 B5 B6 B7'.split(),
                   'UserID': 'A1 A1 A1 A2 A2 A3 A4'.split()}
                 )

  AccID UserID
0    B1     A1
1    B2     A1
2    B3     A1
3    B4     A2
4    B5     A2
5    B6     A3
6    B7     A4

Pivot table:

tmp = pd.pivot_table(data=so, index='UserID', aggfunc=list)

               AccID
UserID              
A1      [B1, B2, B3]
A2          [B4, B5]
A3              [B6]
A4              [B7]

New columns from list:

ans = pd.DataFrame(tmp['AccID'].to_list(), index=tmp.index)

         0     1     2
UserID                
A1      B1    B2    B3
A2      B4    B5  None
A3      B6  None  None
A4      B7  None  None

Changing the column names:

ans.columns = [f"AccID{i + 1}" for i in ans.columns]

       AccID1 AccID2 AccID3
UserID                     
A1         B1     B2     B3
A2         B4     B5   None
A3         B6   None   None
A4         B7   None   None

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM