2016-04-26 99 views
2

我对熊猫有问题。我有一个包含三列的数据框:'id1','id2','amount'。从另一个创建一个数据帧(使用数据透视表)

由此,我想创建另一个数据帧,其索引是'id1',其中的列是'id2',并且这些单元格包含相应的'数量'。

我们去一个例子:

import pandas as pd 
df = pd.DataFrame([['first_person','first_item',10],['first_person','second_item',6],['second_person','first_item',18],['second_person','second_item',36]],columns = ['id1','id2','amount']) 

这将产生:

 id1    id2    amount 
0 first_person  first_item  10 
1 first_person  second_item  6 
2 second_person first_item  18 
3 second_person second_item  36 

而从这个我想创建第二个数据帧是:

    first_item second_item 
first_person  10   6 
second_person 18   36 

当然,在发布之前我已经研究了一段时间,但是我为此设法做了一个双重'for循环'...... Whic我的数据帧的大小无法计算。你会知道如何以更pythonic的方式做到这一点? (这显然是远远比更有效“的”循环!)

回答

4

我认为你可以使用pivotrename_axis(新中pandas0.18.0):

print df 
      id1   id2 amount 
0 first_person first_item  10 
1 first_person second_item  6 
2 second_person first_item  18 
3 second_person second_item  36 

print df.pivot(index='id1', columns='id2', values='amount') 
     .rename_axis(None) 
     .rename_axis(None, axis=1) 

       first_item second_item 
first_person   10   6 
second_person   18   36 
+0

这似乎完全适合我的需要!执行重命名索引问题。事实上,'.rename_axis(None)'方法返回以下错误:'必须通过索引来重命名'(如果它很重要,我在Python 2.7下)。 – ysearka

+0

“pandas”的版本是什么? 'print pd.show_versions()' – jezrael

+0

0.17.1这解释了为什么rename_axis不起作用。 – ysearka