2017-08-07 66 views
1

我有一个数据帧df1看起来像这样:组通过柱值并将其设置为索引在熊猫

df1 = pd.DataFrame({'A':[0,5,4,8,9,0,7,6], 
        'B':['a','s','d','f','g','h','j','k'], 
        'C':['XX','XX','XX','YY','YY','WW','ZZ','ZZ']})  

我的目标是组中的元素根据包含在C列,以便具有行中的值相同的值,具有相同的索引(其必须包含存储在C中的值)。因此,输出应该是这样的:

A B 
XX 0 a 
    5 s 
    4 d 
YY 8 f 
    9 g 
WW 0 h 
ZZ 7 j 
    6 k 

我试图用命令df.groupby('C')但它返回下列对象:

<pandas.core.groupby.DataFrameGroupBy object at 0x000000001A9D4860> 

您能否提供我一个优雅的和智能的方式来实现我的目标是什么?

注:我认为我的问题是主题相关的多索引

+0

你的意思是'df1.set_index( 'C')'? – Zero

+0

它是相似的,但不适合我的问题,因为它会分配和索引到每个元素,而我想要做的是不同的...我想有一个索引来访问数据帧的内容 –

回答

2

看来你需要DataFrame.set_index

df2 = df1.set_index('C') 
print (df2) 
    A B 
C  
XX 0 a 
XX 5 s 
XX 4 d 
YY 8 f 
YY 9 g 
WW 0 h 
ZZ 7 j 
ZZ 6 k 

print (df2.loc['XX']) 
    A B 
C  
XX 0 a 
XX 5 s 
XX 4 d 

如果需要MultiIndex从列CA

df3 = df1.set_index(['C', 'A']) 
print (df3) 
     B 
C A 
XX 0 a 
    5 s 
    4 d 
YY 8 f 
    9 g 
WW 0 h 
ZZ 7 j 
    6 k 

print (df3.loc['XX']) 
    B 
A 
0 a 
5 s 
4 d 
1

我认为你正在寻找pivot_table

pd.pivot_table(df1, values='A', index=['C','B']) 

输出:

 
     A 
C B 
WW h 0 
XX a 0 
    d 4 
    s 5 
YY f 8 
    g 9 
ZZ j 7 
    k 6