Saya ingin mencetak hasil pengelompokan dengan Pandas.
Saya memiliki kerangka data:
import pandas as pd
df = pd.DataFrame({'A': ['one', 'one', 'two', 'three', 'three', 'one'], 'B': range(6)})
print(df)
A B
0 one 0
1 one 1
2 two 2
3 three 3
4 three 4
5 one 5
Saat mencetak setelah pengelompokan menurut 'A', saya memiliki yang berikut:
print(df.groupby('A'))
<pandas.core.groupby.DataFrameGroupBy object at 0x05416E90>
Bagaimana cara mencetak dataframe yang dikelompokkan?
Jika aku melakukan:
print(df.groupby('A').head())
Saya mendapatkan kerangka data seolah-olah tidak dikelompokkan:
A B
A
one 0 one 0
1 one 1
two 2 two 2
three 3 three 3
4 three 4
one 5 one 5
Saya mengharapkan sesuatu seperti:
A B
A
one 0 one 0
1 one 1
5 one 5
two 2 two 2
three 3 three 3
4 three 4
print df.groupby('A').head()
. versi panda apa yang kamu punya?df.groupby(['A', 'B']).sum()
, tetapi akan gagal jika('A', 'B')
pasangan tidak unik.Jawaban:
Cukup lakukan:
Ini juga berhasil,
Untuk pengelompokan kunci selektif: Masukkan kunci yang Anda inginkan di dalam
key_list_from_gb
, dalam berikut, menggunakangb.keys()
: Misalnya,sumber
for A in d['A'].unique(): print(A, df.query(f'A == "{A}"'))
key_list_from_gb
?Jika Anda hanya mencari cara untuk menampilkannya, Anda dapat menggunakan deskripsikan ():
Ini memberi Anda tabel yang rapi.
sumber
Saya mengonfirmasi bahwa perilaku
head()
perubahan antara versi 0,12 dan 0,13. Itu terlihat seperti bug bagi saya. Saya membuat masalah .Tapi operasi groupby tidak benar-benar mengembalikan DataFrame yang diurutkan berdasarkan grup. The
.head()
Metode ini sedikit menyesatkan di sini - itu hanya sebuah fitur kenyamanan untuk membiarkan Anda memeriksa kembali objek (dalam hal ini,df
) yang dikelompokkan. Hasil darigroupby
adalah jenis objek yang terpisah, sebuahGroupBy
objek. Anda harusapply
,transform
ataufilter
untuk kembali ke DataFrame atau Seri.Jika yang ingin Anda lakukan hanyalah mengurutkan menurut nilai di kolom A, Anda harus menggunakan
df.sort('A')
.sumber
head
sebenarnya dilakukanhead(5)
sekarang ini menunjukkan 5 baris pertama, lebih tepat untuk 'menampilkan' bingkaidf.groupby('A').apply(lambda x: x)
, yang secara efektif merupakan passthru. Saya kira Anda bisa memilikipass()
metode, mungkin.Alternatif sederhana lainnya:
sumber
Selain itu, alternatif sederhana lainnya adalah:
sumber
Selain jawaban sebelumnya:
Mengambil contoh Anda,
Kemudian kode 1 baris sederhana
sumber
Terima kasih kepada Surya atas wawasan yang bagus. Saya akan membersihkan solusinya dan hanya melakukan:
sumber
Daftar panggilan () pada objek GroupBy
Memberi anda:
sumber
Anda tidak dapat melihat data groupBy secara langsung dengan pernyataan cetak tetapi Anda dapat melihat dengan mengulangi grup menggunakan for loop coba kode ini untuk melihat grup berdasarkan data
Anda akan mendapatkan output setelah mencoba ini sebagai hasil groupby
Saya harap ini membantu
sumber
Di Jupyter Notebook, jika Anda melakukan hal berikut, ini akan mencetak versi objek yang dikelompokkan. The
apply
Metode membantu dalam penciptaan dataframe multiindex.Keluaran:
Jika Anda ingin
by
kolom tidak muncul di output, cukup jatuhkan kolom, seperti itu.Keluaran:
Di sini, saya tidak yakin mengapa
.iloc[:]
tidak berhasil, bukan[:]
di akhir. Jadi, jika ada beberapa masalah di masa depan karena pembaruan (atau saat ini),.iloc[:len(a)]
juga berfungsi.sumber
Saya menemukan cara yang janggal, sekedar untuk brainstorming, lihat kodenya:
hasil:
Pro sangat mudah untuk mencetak, karena mengembalikan kerangka data, bukan Groupby Object. Dan hasilnya terlihat bagus. Sementara kononnya adalah membuat serangkaian data yang berlebihan.
sumber
Dalam python 3
Dengan cara yang lebih interaktif
sumber
untuk mencetak semua (atau banyak) baris dari df yang dikelompokkan:
sumber