代码之家  ›  专栏  ›  技术社区  ›  ypriverol

熊猫转型真的很慢

  •  0
  • ypriverol  · 技术社区  · 4 年前

    我一直试图将python pandas从一种表示形式转换为另一种表示形式,但速度很慢:

    我当前的数据帧如下:

    Column0, Column 1, Column 2, Column 3, Column 10... 
       p1        1           2         8          3
       p2        2           4         9          6
    
    Column0,   sample,       Exp
       p1       Column 1      1 
       p1       Column 2      2
       p1       Column 3      8
       p1       Column 10     3
       p2       Column 1      2 
       .           .          .
       .           .          . 
    

    我用的是 iterrows 插入一个新的数据帧,但是速度很慢。列1,2不是固定的,但我有一个包含所有名称的集合。

    1 回复  |  直到 4 年前
        1
  •  3
  •   Umar.H    4 年前

    IIUC,你可以用 melt ,

    一般情况下,在panda中不鼓励循环,除非没有其他选择或者您有一个合理的用例。

    d = """Column0, Column 1, Column 2, Column 3, Column 10 
       p1,        1,           2,         8,          3
       p2,        2,           4,         9,          6"""
    
    
    from io import StringIO
    
    df = pd.read_csv(StringIO(d),sep=',')
    
    df2 = pd.melt(df,id_vars=['Column0'],var_name='Sample',value_name='Exp')
    
    print(df2)
    
      Column0       Sample  Exp
    0      p1     Column 1    1
    1      p2     Column 1    2
    2      p1     Column 2    2
    3      p2     Column 2    4
    4      p1     Column 3    8
    5      p2     Column 3    9
    6      p1   Column 10     3
    7      p2   Column 10     6
    

    pd.melt(df,id_vars=['Column0'],var_name='Sample',value_name='Exp').rename(
                 columns = {'Column0' : 'NewCol',...})