Saya memiliki dua kerangka data, DF1(33, 92) dan DF2(11, 18) , saya ingin menyalin kolom DF2 18 ke DF1 berdasarkan nilai yang cocok dari nama kolom 'ID' di kedua DF, 18 kolom ini memiliki nama yang sama di kedua kerangka data.

Saya menggunakan penggabungan berikut: finaldf = pd.merge(DF1, DF2, on = 'ID', how ='left')

Ini berfungsi dengan baik kecuali itu mengubah nama 18 kolom di DF1 dan menambahkan 18 kolom lainnya. jadi bentuk kerangka data terakhir adalah (33, 109) sementara seharusnya memiliki bentuk DF1 (33, 92) tetapi dengan baris yang diperbarui.

3
Alani 24 Mei 2021, 07:15

2 jawaban

Jawaban Terbaik

finaldf Anda setelah penggabungan memiliki bentuk (33, 109) karena memiliki kolom dengan nama yang mirip tetapi _x dan _y ditambahkan padanya. _x yang berasal dari DF1 dan _y yang berasal dari DF2.

Anda perlu menjalankan kode di bawah ini setelah bergabung untuk menghapus kolom "_x" dan "_y" tambahan untuk 18 tersebut dan menyalin nilai dari DF2 ke DF1 di mana mereka cocok "INDO":

remove_cols = []

for col in DF2.columns:
    if col == 'ID':
        continue
    finaldf[col] = finaldf[col+'_y'].fillna(finaldf[col+'_x'])
    remove_cols += [col+'_x', col+'_y']

finaldf.drop(remove_cols, axis=1, inplace=True)

Untuk informasi lebih lanjut tentang mengapa kolom "_x" dan "_y" muncul di kerangka data gabungan Anda, saya sarankan Anda untuk memeriksa dokumentasi metode pd.DataFrame.merge satu kali. "_x" dan "_y" adalah sufiks yang ditambahkan oleh operasi gabung secara default untuk membedakan antara kolom dengan nama yang mirip.


Alternatifnya:

pd.DataFrame.update adalah metode dalam panda untuk mencapai apa yang Anda coba lakukan.

Lihat di sini. Tetapi ada satu peringatan dengan menggunakannya, yaitu jika Anda memiliki nilai NaN di DF2 yang ingin Anda salin ke DF1, maka itu tidak akan dilakukan. Ini hanya akan memperbarui nilai non-NA:

Ubah di tempat menggunakan nilai non-NA dari DataFrame lain.

3
Ank 24 Mei 2021, 08:00

Jika Anda ingin nilai untuk 18 kolom tersebut (katakanlah col1,col2...col18) hanya dari DF2, Anda dapat melakukannya

cols_18 = ["col1",col2"....]
cols_to_use = list(set(DF1.columns) - set(cols_18))
pd.merge(DF1[cols_to_use],DF2...), on = 'ID', how ='left')

Jika Anda ingin menyimpan kolom dari kedua kerangka data, sufiks default adalah _x dan _y. tetapi Anda dapat menimpanya seperti mengikuti

pd.merge(DF1,DF2...), on = 'ID', how ='left, suffixes = ["","_new"])

Sekarang akan ada 109 kolom, tetapi nama kolom kerangka data utama tetap utuh. Kolom dari DF2 memiliki akhiran "_new"

0
sudheer naidu 24 Mei 2021, 09:11