Saya memiliki DataFrame dengan ribuan baris. Strukturnya seperti di bawah ini

     A    B    C     D 
 0   q   20    'f'
 1   q   14    'd'
 2   o   20    'a'

Saya ingin membandingkan kolom A dari baris saat ini dan baris berikutnya. Jika nilai-nilai itu sama, saya ingin menambahkan nilai kolom B yang nilainya lebih rendah ke kolom D dari baris yang dibandingkan yang nilainya lebih besar. Kemudian saya ingin menghapus nilai kolom yang dipindahkan dari kolom B. Ini seperti proses swap.

    A    B    C     D 
0   q   20    'f'   14
1   o   20    'a'

Saya memiliki ribuan baris dan iloc, loc, at metode bekerja lambat. Setidaknya saya ingin menggunakan metode penerapan DataFrame. Saya mencoba beberapa contoh kode tetapi tidak berhasil.

Saya ingin melakukan sesuatu seperti di bawah ini: DataFrame.apply(lambda row: self.compare(row, next(row)), axis=1))

Saya memiliki metode perbandingan tetapi saya tidak dapat meneruskan baris berikutnya ke metode perbandingan. Bagaimana saya bisa meneruskannya ke metode? Saya juga terbuka untuk mendengar solusi panda yang lebih cepat.

0
Ugurcan 19 Maret 2020, 23:58

1 menjawab

Jawaban Terbaik

Sebaiknya jangan lakukan itu dengan apply karena akan lambat; anda dapat melihat menggunakan shift, mis.

df['A_shift'] = df['A'].shift(1)
df['Is_Same'] = 0
df.loc[df.A_shift == df.A, 'Is_Same'] = 1

Menjadi sedikit lebih rumit jika Anda melakukan shift dalam grup, tetapi masih memungkinkan.

2
morganics 19 Maret 2020, 21:03