Saya memiliki dataFrame dengan kolom Items dan Ranges.

      Items  Ranges
0     A      30
1     A      30
2     A     -10
3     B      20

Saya ingin menggabungkan row duplikat dan menambahkan nilai rentang tetapi hanya untuk baris yang persis sama. Data yang dihasilkan akan terlihat seperti ini:

          Ranges
Items        
A          60
A         -10
B          20

Saya mencoba df2 = df1.groupby(['Items']).sum() dan saya mendapatkan hasilnya sebagai:

          Ranges
Items        
A          50
B          20

Apa cara paling efisien untuk mencapai hasil ini?

1
Animeartist 5 April 2021, 12:12

3 jawaban

Jawaban Terbaik

Anda dapat groupby dan agregat seperti:

df.groupby(['Items', 'Ranges'], as_index=False).agg({'Items': 'first', 'Ranges': 'sum'})

Keluaran:

  Items  Ranges
0     A     -10
1     A      60
2     B      20
2
Mykola Zotko 5 April 2021, 09:20

Anda harus mengelompokkannya tidak hanya dengan item tetapi juga dengan jangkauan. Ingatlah bahwa item yang Anda grup setelah pengelompokan memiliki beberapa nilai. Sejak Anda dikelompokkan, Anda hanya memiliki satu item. Jadi, Anda harus memperhitungkan apa yang akan terjadi pada beberapa nilai yang sesuai. Untuk ini, Anda harus menggunakan fungsi agregat. Saya sarankan Anda untuk memeriksa tautannya.

Dokumen Pandas-Agregate

0
notNowOnlyCoding 5 April 2021, 09:57

Anda dapat groupby kedua kolom, dan kemudian droplevel dengan 'rentang' (level 1) dalam indeks:

df.groupby(['Items', 'Ranges'])['Ranges'].sum().droplevel(1).reset_index()

Keluaran:

  Items  Ranges
0     A     -10
1     A      60
2     B      20
1
perl 5 April 2021, 09:23