Pandas - 在groupby之后将列转换为新行

nes*_*esi 2 python pivot group-by pandas

我有一个熊猫数据帧.我需要将一些列转换为行.数据帧在前3列中每3行具有相同的数据.因此,我将需要6个列,您将在我预期的数据框中看到.我有以下数据帧:

shopCode    Product   Code  Score
    111      Apple    123    0.70
    111      Apple    456    0.75
    111      Apple    789    0.80
    222      Orange   142    0.66
    222      Orange   136    0.83
    222      Orange   623    0.76
Run Code Online (Sandbox Code Playgroud)

我预期的数据框是:

shopCode  Product   Code1 Code2 Code3 Score1 Score2 Score3
  111      Apple     123   456   789   0.70   0.75   0.80
  222      Orange    142   136   623   0.66   0.83   0.76
Run Code Online (Sandbox Code Playgroud)

我尝试使用, df.pivot(index=['shopCode', 'Product'], columns=['Code1', 'Code2', 'Code3', 'Score1', 'Score2', 'Score3'], values=['Code', 'Score']) 但它不起作用.

WeN*_*Ben 7

我们用 pivot_table

df=pd.pivot_table(df,index=['shopCode','Product'],columns=df.groupby(['shopCode','Product']).cumcount().add(1),values=['Code','Score'],aggfunc='sum')
df.columns=df.columns.map('{0[0]}{0[1]}'.format) 
df
Out[112]: 
                  Code1  Code2  Code3  Score1  Score2  Score3
shopCode Product                                             
111      Apple      123    456    789    0.70    0.75    0.80
222      Orange     142    136    623    0.66    0.83    0.76
Run Code Online (Sandbox Code Playgroud)

reset_index

df.reset_index()
Out[113]: 
   shopCode Product  Code1  Code2  Code3  Score1  Score2  Score3
0       111   Apple    123    456    789    0.70    0.75    0.80
1       222  Orange    142    136    623    0.66    0.83    0.76
Run Code Online (Sandbox Code Playgroud)