Python 使用数据帧groupby索引并将行值转换为列

Python 使用数据帧groupby索引并将行值转换为列,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,虽然我认为我可以天真而拙劣地做到这一点,但我有兴趣学习一种更优雅、更有效的方法 给定以下数据帧: In[42]:df=pd.DataFrame({'flavor':['goober','tronic','goober','tronic','tronic'],'points':[42,55,31101]},index=['foo','foo','bar','bar']) In[43]:df 出[43]: 风味点 富古伯42 富创55 巴古伯31 电子棒101 我想按索引分组,并将flavor列中

虽然我认为我可以天真而拙劣地做到这一点,但我有兴趣学习一种更优雅、更有效的方法

给定以下数据帧:

In[42]:df=pd.DataFrame({'flavor':['goober','tronic','goober','tronic','tronic'],'points':[42,55,31101]},index=['foo','foo','bar','bar'])
In[43]:df
出[43]:
风味点
富古伯42
富创55
巴古伯31
电子棒101
我想按索引分组,并将
flavor
列中的值转换为列标题本身,完全抛弃
flavor
点。因此,最终结果如下所示:

In[44]:pd.DataFrame({'goober':[42,31],'tronic':[55101]},index=['foo','bar']))
出[44]:
古柏电子
富42 55
酒吧31 101
感谢您的建议。

首先与“将索引转换为列”一起使用,然后通过以下方式删除索引和列名称:

或用于:

您可以使用:

印刷品:

flavor  goober  tronic
bar         31     101
foo         42      55


注意:如果不需要
aggfunc
,请使用
.pivot()
。正如@jezrael在评论中指出的那样。

这里有聚合
mean
,OP需要它吗?@jezrael你说得对,
。这里最好使用pivot
。好的,在这里删除评论;)也许有人应该生气;)这显然是一个玩具的例子,在规模上,它们在性能和/或内存使用方面会有所不同吗?感谢您的回答。@ghukill-hmmm,一般来说,旋转是非常复杂的操作,所以不容易说什么解决方案更好。最好的数据测试。关于何时
.unstack()
有什么特别有用的建议吗?也许是一个很好的问题/答案?如果没有的话,不用担心,但我想围绕
透视
取消堆叠
建立一些直觉,以及它们的光芒所在。@ghukill-当然,谢谢@jezrael!非常感谢大家。
df = (df.set_index('flavor', append=True)['points']
        .unstack()
        .rename_axis(index=None, columns=None))
print (df)
     goober  tronic
bar      31     101
foo      42      55
print( pd.pivot_table(df, index=df.index, columns='flavor', values='points') )
flavor  goober  tronic
bar         31     101
foo         42      55