Saya memiliki kerangka data panda dalam format berikut:
df = pd.DataFrame([[1.1, 1.1, 1.1, 2.6, 2.5, 3.4,2.6,2.6,3.4,3.4,2.6,1.1,1.1,3.3], list('AAABBBBABCBDDD'), [1.1, 1.7, 2.5, 2.6, 3.3, 3.8,4.0,4.2,4.3,4.5,4.6,4.7,4.7,4.8], ['x/y/z','x/y','x/y/z/n','x/u','x','x/u/v','x/y/z','x','x/u/v/b','-','x/y','x/y/z','x','x/u/v/w'],['1','3','3','2','4','2','5','3','6','3','5','1','1','1']]).T
df.columns = ['col1','col2','col3','col4','col5']
df:
col1 col2 col3 col4 col5
0 1.1 A 1.1 x/y/z 1
1 1.1 A 1.7 x/y 3
2 1.1 A 2.5 x/y/z/n 3
3 2.6 B 2.6 x/u 2
4 2.5 B 3.3 x 4
5 3.4 B 3.8 x/u/v 2
6 2.6 B 4 x/y/z 5
7 2.6 A 4.2 x 3
8 3.4 B 4.3 x/u/v/b 6
9 3.4 C 4.5 - 3
10 2.6 B 4.6 x/y 5
11 1.1 D 4.7 x/y/z 1
12 1.1 D 4.7 x 1
13 3.3 D 4.8 x/u/v/w 1
Sekarang saya ingin mengelompokkan ini dengan dua kolom seperti berikut:
df.groupby(['col5','col2']).reset_index()
Keluaran:
index col1 col2 col3 col4 col5
col5 col2
1 A 0 0 1.1 A 1.1 x/y/z 1
D 0 11 1.1 D 4.7 x/y/z 1
1 12 1.1 D 4.7 x 1
2 13 3.3 D 4.8 x/u/v/w 1
2 B 0 3 2.6 B 2.6 x/u 2
1 5 3.4 B 3.8 x/u/v 2
3 A 0 1 1.1 A 1.7 x/y 3
1 2 1.1 A 2.5 x/y/z/n 3
2 7 2.6 A 4.2 x 3
C 0 9 3.4 C 4.5 - 3
4 B 0 4 2.5 B 3.3 x 4
5 B 0 6 2.6 B 4 x/y/z 5
1 10 2.6 B 4.6 x/y 5
6 B 0 8 3.4 B 4.3 x/u/v/b 6
Saya ingin mendapatkan hitungan dengan setiap baris seperti berikut. Output yang Diharapkan:
col5 col2 count
1 A 1
D 3
2 B 2
etc...
Bagaimana cara mendapatkan hasil yang saya harapkan? Dan saya ingin mencari jumlah terbesar untuk setiap nilai 'col2'?
Jawaban:
Diikuti oleh jawaban @ Andy, Anda dapat melakukan hal berikut untuk menyelesaikan pertanyaan kedua:
sumber
Anda mencari
size
:Untuk mendapatkan jawaban yang sama dengan waitingkuo ("pertanyaan kedua"), tetapi sedikit lebih bersih, adalah dengan mengelompokkan berdasarkan level:
sumber
Memasukkan data ke dalam kerangka data panda dan memberikan nama kolom .
Ini adalah data cetak kami:
Untuk membuat grup kerangka data dalam panda dan penghitung ,
Anda perlu memberikan satu kolom lagi yang menghitung pengelompokan, sebut saja kolom itu sebagai, "COUNTER" dalam kerangka data .
Seperti ini:
KELUARAN:
sumber
Solusi idiomatik yang hanya menggunakan satu grup oleh
Penjelasan
Hasil dari
size
metode groupby adalah Seri dengancol5
dancol2
dalam indeks. Dari sini, Anda dapat menggunakan metode groupby lain untuk menemukan nilai maksimum dari setiap nilaicol2
tetapi tidak perlu dilakukan. Anda cukup mengurutkan semua nilai secara turun-temurun dan kemudian hanya menyimpan baris dengan kemunculan pertamacol2
dengandrop_duplicates
metode.sumber
name
dalamreset_index()
versi panda saat ini: pandas.pydata.org/pandas-docs/stable/generated/…DataFrame
tidakSeries
. Terima kasih untuk tautannya.Jika Anda ingin menambahkan kolom baru (misalnya 'count_column') yang berisi jumlah grup ke dalam kerangka data:
(Saya memilih 'col5' karena tidak mengandung nan)
sumber
Anda bisa menggunakan hitungan fungsi bawaan diikuti oleh fungsi grup oleh
sumber