Saya memiliki kerangka data yang besar (sekitar 35 kolom), di mana 1 kolom - concat_strs adalah gabungan dari 8 kolom dalam kerangka data. Ini digunakan untuk mendeteksi duplikat. Yang ingin saya lakukan adalah menggabungkan baris, di mana concat_strs memiliki nilai yang sama, pada kolom val, abs_val, price, abs_price (menggunakan jumlah).

Saya telah melakukan hal berikut:

agg_attributes = {'val': 'sum', 'abs_val': 'sum', 'price': 'sum', 'abs_price': 'sum'}
final_df= df.groupby('concat_strs', as_index=False).aggregate(agg_attributes)

Tetapi, ketika saya melihat final_df, saya melihat 2 masalah:

  • Kolom lain dihapus, jadi saya hanya punya 5 kolom. Saya telah mencoba melakukan final_df.reindex(columns=df.columns), tetapi semua kolom lainnya adalah NaN
  • Jumlah baris di final_df tetap sama seperti di df (kira-kira 300 ribu baris). Namun, itu harus dikurangi (diperiksa secara manual)

Pertanyaannya adalah - apa yang dilakukan salah dan apakah ada saran perbaikan?

0
Tim Saeed 13 Januari 2020, 12:04

2 jawaban

Jawaban Terbaik

Anda mengelompokkan dengan concat_strs, jadi hanya concat_strs dan kolom di agg_attributes yang disimpan, karena groupby operasi, panda tidak tahu apa yang harus dilakukan dengan kolom lain.

Anda dapat memasukkan semua kolom dengan first agg untuk mempertahankan nilai pertama kolom itu (jika digandakan), atau last dll. tergantung pada apa yang Anda butuhkan.

Juga cara ini untuk dedup saya yakin ini operasi yang baik, dapatkah Anda membuang semua duplikat?

Anda tidak perlu concat_strs juga, karena groupby mendukung masukan dalam daftar kolom untuk dikelompokkan

0
Phung Duy Phong 13 Januari 2020, 09:13

Tidak yakin apakah saya memahami pertanyaan dengan benar. tapi kamu bisa coba ini?

final_df = df.groupby(['concat_strs']).sum()
0
Srini 13 Januari 2020, 09:14