本文介绍了Pandas - 在 groupby 之后将列转换为新行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个熊猫数据框.我需要将某些列转换为行.数据框在每 3 行的前两列中具有相同的数据.因此,您将在我预期的数据框中看到,我还需要 6 列.我有以下数据框:
I have a pandas dataframe. I need to convert some of the columns into rows. The dataframe has same data in the first two columns for every 3 rows. So, I need 6 more columns as you will see in my expected dataframe.I have the following dataframe:
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
我预期的数据框是:
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
我尝试使用df.pivot(index=['shopCode', 'Product'], columns=['Code1', 'Code2', 'Code3', 'Score1', 'Score2', 'Score3'], values=['代码', '分数'])
但它不起作用.
I tried to usedf.pivot(index=['shopCode', 'Product'], columns=['Code1', 'Code2', 'Code3', 'Score1', 'Score2', 'Score3'], values=['Code', 'Score'])
but it doesn't work.
推荐答案
我们使用 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
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
这篇关于Pandas - 在 groupby 之后将列转换为新行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!