Pandas DataFrame-创建动态列数

时间:2018-10-28 21:51:43

标签: python database pandas numpy dataframe

数据:

    qid     qualid  val
0   1845631864  227     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
1   1899053658  44  1,3,3,2,2,2,3,3,4,4,4,5,5,5,5,5,5,5
2   1192887045  197     704
3   1833579269  194     139472
4   1497352469  30  120026,170154,152723,90407,63119,80077,178871,...

问题:

val 列中用逗号分隔的数字需要在每行的不同列中表示。

我不知道Pandas是否允许这样做,但是理想情况下,我们希望为每行创建精确的 n 列数,其中 n 是数字 val 列中的元素数量。

如果不可能,则val中最大的元素数应为列和行数,其中元素少于应由NaN组成的列和行。

上述问题的示例解决方案1:

    qid       qualid  val1  val2  val3        valn-3 valn-2 valn-1 valn
0   1845631864  227     0     0    0    ......  0        0      0    0
1   1899053658  44      1     3    3    ......  5
2   1192887045  197    704
3   1833579269  194   139472
4   1497352469  30    120026 170154 152723.....63119  80077 178871 12313

上述问题的替代解决方案2:

    qid       qualid  val1  val2  val3        valn-3 valn-2 valn-1 valn
0   1845631864  227     0     0    0    ......  0        0      0    0
1   1899053658  44      1     3    3    ......  5      NaN    NaN   NaN
2   1192887045  197    704   NaN  NaN   ...... NaN     NaN    NaN   NaN
3   1833579269  194   139472 NaN  NaN   ...... NaN     NaN    NaN   
4   1497352469  30    120026 170154 152723.....63119  80077 178871 12313

1 个答案:

答案 0 :(得分:4)

您可以检查str.split

pd.concat([df,df.val.str.split(',',expand=True).add_prefix('Val_')],axis=1)
Out[29]: 
          qid  qualid  ...   Val_16 Val_17
0  1845631864     227  ...        0      0
1  1899053658      44  ...        5      5
2  1192887045     197  ...     None   None
3  1833579269     194  ...     None   None
4  1497352469      30  ...     None   None