Saya mulai dengan input data seperti ini
df1 = pandas.DataFrame( {
"Name" : ["Alice", "Bob", "Mallory", "Mallory", "Bob" , "Mallory"] ,
"City" : ["Seattle", "Seattle", "Portland", "Seattle", "Seattle", "Portland"] } )
Yang ketika dicetak muncul sebagai ini:
City Name
0 Seattle Alice
1 Seattle Bob
2 Portland Mallory
3 Seattle Mallory
4 Seattle Bob
5 Portland Mallory
Pengelompokan cukup sederhana:
g1 = df1.groupby( [ "Name", "City"] ).count()
dan mencetak menghasilkan GroupBy
objek:
City Name
Name City
Alice Seattle 1 1
Bob Seattle 2 2
Mallory Portland 2 2
Seattle 1 1
Tapi yang saya inginkan pada akhirnya adalah objek DataFrame lain yang berisi semua baris dalam objek GroupBy. Dengan kata lain saya ingin mendapatkan hasil sebagai berikut:
City Name
Name City
Alice Seattle 1 1
Bob Seattle 2 2
Mallory Portland 2 2
Mallory Seattle 1 1
Saya tidak bisa melihat bagaimana melakukannya di dokumentasi panda. Petunjuk apa pun akan diterima.
python
pandas
dataframe
pandas-groupby
multi-index
saveenr
sumber
sumber
Empty DataFrame
Columns: []
Index: [(Alice, Seattle), (Bob, Seattle), (Mallory, Portland), (Mallory, Seattle)]
Jawaban:
g1
di sini adalah DataFrame. Ini memiliki indeks hierarkis, meskipun:Mungkin Anda menginginkan sesuatu seperti ini?
Atau sesuatu seperti:
sumber
reset.index()
melakukan pekerjaan, bagus!df1.groupby( [ "Name", "City"] ).size().to_frame(name = 'count').reset_index()
.reset_index()
bagi saya adalah cara terbaik untuk bergabung dengan hasil yang akan Anda dapatkandf.groupby('some_column').apply(your_custom_func)
. Ini tidak intuitif untuk saya.pandas.core.groupby.DataFrameGroupBy
objek, bukanpandas.core.frame.DataFrame
.Saya ingin sedikit mengubah jawaban yang diberikan oleh Wes, karena versi 0.16.2 membutuhkan
as_index=False
. Jika Anda tidak mengaturnya, Anda mendapatkan kerangka data kosong.Sumber :
EDIT:
Dalam versi
0.17.1
dan kemudian Anda dapat menggunakansubset
dicount
danreset_index
dengan parametername
disize
:Perbedaan antara
count
dansize
adalah yangsize
menghitung nilai NaN sementaracount
tidak.sumber
df1.groupby( [ "Name", "City"]).size().reset_index(name="count")
as_index=False' stopped working in latest versions? I also tried to run
df1.groupby (["Name", "City"], as_index = False) .size () `tetapi itu tidak mempengaruhi hasil (mungkin karena hasil pengelompokannyaSeries
tidakDataFrame
groupby
kolom-kolom ini. Tapi saya tidak yakin, karena saya bukan pengembang panda.Cukup, ini harus melakukan tugas:
Di sini,
grouped_df.size()
tarik ke atas kelompok unik dengan hitungan, danreset_index()
metode mengatur ulang nama kolom yang Anda inginkan. Akhirnya,Dataframe()
fungsi panda dipanggil untuk membuat objek DataFrame.sumber
Kuncinya adalah menggunakan metode reset_index () .
Menggunakan:
Sekarang Anda memiliki kerangka data baru di g1 :
sumber
Mungkin saya salah paham pertanyaannya tetapi jika Anda ingin mengonversi grup dengan kembali ke dataframe, Anda dapat menggunakan .to_frame (). Saya ingin mengatur ulang indeks ketika saya melakukan ini jadi saya memasukkan bagian itu juga.
contoh kode yang tidak terkait dengan pertanyaan
sumber
Saya menemukan ini bekerja untuk saya.
sumber
Solusi di bawah ini mungkin lebih sederhana:
sumber
Saya telah mengumpulkan dengan data bijaksana Qty dan menyimpannya ke dataframe
sumber
Solusi ini hanya berfungsi sebagian untuk saya karena saya melakukan banyak agregasi. Berikut ini adalah contoh hasil pengelompokan saya yang ingin saya konversikan ke kerangka data:
Karena saya menginginkan lebih dari hitungan yang disediakan oleh reset_index (), saya menulis metode manual untuk mengubah gambar di atas menjadi kerangka data. Saya mengerti ini bukan cara yang paling pythonic / panda melakukan ini karena cukup verbose dan eksplisit, tapi itu semua yang saya butuhkan. Pada dasarnya, gunakan metode reset_index () yang dijelaskan di atas untuk memulai kerangka data "perancah", kemudian lewati kelompok pasangan dalam kerangka data yang dikelompokkan, ambil indeks, lakukan perhitungan Anda terhadap kerangka data yang tidak dikelompokkan, dan tetapkan nilai dalam kerangka data yang baru Anda kumpulkan .
Jika kamus bukan milik Anda, perhitungan bisa diterapkan inline di dalam for loop:
sumber