Saya memiliki kerangka data df1 yang terlihat seperti ini:

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']})    

Tujuan saya adalah mengelompokkan elemen sesuai dengan nilai yang terdapat dalam kolom Csehingga baris memiliki nilai yang sama, memiliki indeks yang sama (yang harus berisi nilai yang disimpan dalam C). Oleh karena itu outputnya harus seperti ini:

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

Saya mencoba menggunakan perintah df.groupby('C') tetapi mengembalikan objek berikut:

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

Bisakah Anda menyarankan saya cara yang elegan dan cerdas untuk mencapai tujuan saya?

Catatan: Saya pikir pertanyaan saya entah bagaimana terkait dengan multi-pengindeksan

2
Federico Gentile 7 Agustus 2017, 14:41

2 jawaban

Jawaban Terbaik

Sepertinya Anda perlu 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

Jika perlu MultiIndex dari kolom C dan A:

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
4
jezrael 7 Agustus 2017, 12:05

Saya pikir Anda mencari pivot_table yaitu

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

Keluaran:

      A
C  B   
WW h  0
XX a  0
   d  4
   s  5
YY f  8
   g  9
ZZ j  7
   k  6
2
Bharath 7 Agustus 2017, 11:56