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

多行熊猫数据帧到多列

  •  2
  • Amir  · 技术社区  · 6 年前

    我有熊猫数据框:

    d2 = {'F': ['apple', 'grap','figs'], 'score': [10,20,15],'week': [1,1,1]}
    df2 = pd.DataFrame(data=d2)
    
    d1 = {'F': ['apple', 'grap','figs'], 'score': [20,30,35],'week': [2,2,2]}
    df1 = pd.DataFrame(data=d1)
    
    df=pd.concat([df1,df2])
    
         F  score   week
    0   apple   20  2
    1   grap    30  2
    2   figs    35  2
    0   apple   10  1
    1   grap    20  1
    2   figs    15  1
    

    我想把每个f的名字列成( 这是理想的结果 ):

    week  apple grap figs 
    1      20    30   35   
    2      10    20   15   
    

    我尝试设置索引:

    print (df.set_index('F').T)
    

    但结果并不是我想要的:

    F      apple  grap  figs  apple  grap  figs
    score     20    30    35     10    20    15
    week       2     2     2      1     1     1
    

    有没有什么方法或函数可以直接用来得到我需要的结果?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Scott Boston    6 年前

    编辑以处理具有新预期结果的更新问题:

    df.pivot('week','F','score').reset_index()
    

    输出:

    F  week  apple  figs  grap
    0     1     10    15    20
    1     2     20    35    30
    

    使用 sort_values :

    df.sort_values(['F','week']).reset_index(drop=True)
    

    输出:

           F  score  week
    0  apple     10     1
    1  apple     20     2
    2   figs     15     1
    3   figs     35     2
    4   grap     20     1
    5   grap     30     2
    
        2
  •  0
  •   Sreekiran A R    6 年前

    您可以在排序后使用.t、转置函数来获得所需的输出。

    newdf=df.sort_values(['F','week']).T
    

    产量

    F      apple  apple  figs  figs  grap  grap
    score     10    20    15     35    20    30
    week       1     2     1      2     1     2