繁体   English   中英

Pandas 如何旋转/取消旋转/添加虚拟列名称

[英]Pandas how to pivot/unpivot/add a dummy column name

我想从长表转换为宽表,其中包含基于 accid 数创建的虚拟列名

样品 excel 输入与 output 附加

在此处输入图像描述

请帮忙

我能够减少到 2 个步骤,使用pivot_table aggfunc=list进行数据透视表,然后从该列表创建新列。

我不确定我是否想出了你想要的,因为对列的分配只是从左边填满。

创建 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表:

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

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

列表中的新列:

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

更改列名:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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