Saya punya panda DataFrame
seperti berikut.
df = pd.DataFrame({'id' : [1,1,1,2,2,3,3,3,3,4,4,5,6,6,6,7,7],
'value' : ["first","second","second","first",
"second","first","third","fourth",
"fifth","second","fifth","first",
"first","second","third","fourth","fifth"]})
Saya ingin mengelompokkan ini berdasarkan ["id", "value"] dan mendapatkan baris pertama dari setiap grup.
id value
0 1 first
1 1 second
2 1 second
3 2 first
4 2 second
5 3 first
6 3 third
7 3 fourth
8 3 fifth
9 4 second
10 4 fifth
11 5 first
12 6 first
13 6 second
14 6 third
15 7 fourth
16 7 fifth
Hasil yang diharapkan
id value
1 first
2 first
3 first
4 second
5 first
6 first
7 fourth
Saya mencoba mengikuti yang hanya memberikan baris pertama DataFrame
. Setiap bantuan mengenai hal ini sangat kami hargai.
In [25]: for index, row in df.iterrows():
....: df2 = pd.DataFrame(df.groupby(['id','value']).reset_index().ix[0])
first()
sehubungan dengan nans sangat mengejutkan dan sesuatu yang saya pikir kebanyakan orang tidak akan berharap.Jawaban:
Jika Anda perlu
id
sebagai kolom:Untuk mendapatkan n catatan pertama, Anda dapat menggunakan head ():
sumber
tail(n)
(standarnya adalah n = 5) ( ref. ). Jangan bingunglast()
, saya membuat kesalahan itu.groupby('id',as_index=False)
juga disimpanid
sebagai kolomIni akan memberi Anda baris kedua dari setiap grup (nol diindeks, n (0) sama dengan pertama ()):
Dokumentasi: http://pandas.pydata.org/pandas-docs/stable/groupby.html#taking-the-nth-row-of-each-group
sumber
nth((0,1,2))
ataunth(range(3))
.TypeError: n needs to be an int or a list/set/tuple of ints
range(3)
jangan kembali daftar kecuali Anda mengetiklist(range(3))
.Saya sarankan untuk menggunakan
.nth(0)
daripada.first()
jika Anda perlu mendapatkan baris pertama.Perbedaan di antara mereka adalah bagaimana mereka menangani NaN, jadi
.nth(0)
akan mengembalikan baris pertama grup, apa pun nilai di baris ini, sementara.first()
pada akhirnya akan mengembalikan nilai bukan pertamaNaN
di setiap kolom.Misalnya jika dataset Anda adalah:
Dan
sumber
.head(1)
juga tampaknya berperilaku seperti.nth(0)
, kecuali untuk indeksmungkin ini yang kamu inginkan
sumber
Jika Anda hanya memerlukan baris pertama dari setiap grup yang dapat kami lakukan
drop_duplicates
, Perhatikan metode fungsi defaultkeep='first'
.sumber