pandas:将一系列字母数字文本拆分并转换为列和行

当前数据框架:我有一个 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        |

+----------+----------------------------------------------------------------------------------------+


所以,到目前为止我的尝试都没有成功。非常感谢任何指示/帮助!


慕森卡
浏览 82回答 1
1回答

狐的传说

您可以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)dfOut[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  
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python