亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

pandas:將一系列字母數字文本拆分并轉換為列和行

pandas:將一系列字母數字文本拆分并轉換為列和行

慕森卡 2023-12-09 16:03:36
當前數據框架:我有一個 pandas 數據框架,其中每個員工都有一個文本代碼(所有代碼以 T 開頭)以及代碼旁邊的相關頻率。所有文本代碼都有 8 個字符。+----------+-------------------------------------------------------------+|  emp_id  |   text                                                      |+----------+-------------------------------------------------------------+|   E0001  | [T0431516,-8,T0401531,-12,T0517519,12]                      ||   E0002  | [T0701540,-1,T0431516,-2]                                   ||   E0003  | [T0517519,-1,T0421531,-7,T0516319,9,T0500371,-6,T0309711,-3]||   E0004  | [T0516319,-3]                                               ||   E0005  | [T0431516,2]                                                |+----------+-------------------------------------------------------------+預期數據框:我試圖將數據框中的文本代碼作為單獨的列顯示,如果員工具有該代碼的頻率,則填充頻率,否則為 0。+----------+----------------------------------------------------------------------------------------+|  emp_id  | T0431516 | T0401531 | T0517519 | T0701540 | T0421531 |  T0516319 | T0500371 | T0309711 |                                      +----------+----------------------------------------------------------------------------------------+|   E0001  | -8       | -12      | 12       | 0        | 0        | 0         | 0        | 0        ||   E0002  | -2       | 0        | 0        | -1       | 0        | 0         | 0        | 0        ||   E0003  | 0        | 0        | -1       | 0        | -7       | 9         | -6       | -3       ||   E0004  | 0        | 0        | 0        | 0        | 0        | -3        | 0        | 0        ||   E0005  | 2        | 0        | 0        | 0        | 0        | 0         | 0        | 0        |+----------+----------------------------------------------------------------------------------------+所以,到目前為止我的嘗試都沒有成功。非常感謝任何指示/幫助!
查看完整描述

1 回答

?
狐的傳說

TA貢獻1804條經驗 獲得超3個贊

您可以explode數據框,然后創建一個pivot_table:


df = pd.DataFrame({'emp_id' : ['E0001', 'E0002', 'E0003', 'E0004', 'E0005'],

                  'text' : [['T0431516',-8,'T0401531',-12,'T0517519',12],

                 ['T0701540',-1,'T0431516',-2],['T0517519',-1,'T0421531',-7,'T0516319',9,'T0500371',-6,'T0309711',-3],

                 ['T0516319',-3], ['T0431516',2]]})

df = df.explode('text')

df['freq'] = df['text'].shift(-1)

df = df[df['text'].str[0] == 'T']

df['freq'] = df['freq'].astype(int)

df = pd.pivot_table(df, index='emp_id', columns='text', values='freq',aggfunc = 'sum').fillna(0).astype(int)

df

Out[1]: 

text    T0309711  T0401531  T0421531  T0431516  T0500371  T0516319  T0517519  \

emp_id                                                                         

E0001          0       -12         0        -8         0         0        12   

E0002          0         0         0        -2         0         0         0   

E0003         -3         0        -7         0        -6         9        -1   

E0004          0         0         0         0         0        -3         0   

E0005          0         0         0         2         0         0         0   


text    T0701540  

emp_id            

E0001          0  

E0002         -1  

E0003          0  

E0004          0  

E0005          0  


查看完整回答
反對 回復 2023-12-09
  • 1 回答
  • 0 關注
  • 149 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號