Pandas veri çerçevesi üzerinde bir groupby yapmanın, ancak bazı sütunları bu groupby'den hariç tutmanın en iyi yolu nedir? ör. aşağıdaki veri çerçevesine sahibim:
Kod Ülke Ürün_Kodu Ürün Ele_Kodu Birim Y1961 Y1962 Y1963
2 Afganistan 15 Buğday 5312 Ha 10 20 30
2 Afganistan 25 Mısır 5312 Ha 10 20 30
4 Angola 15 Buğday 7312 Ha 30 40 50
4 Angola 25 Mısır 7312 Ha 30 40 50
Country ve Item_Code sütunlarına göre gruplama yapmak ve yalnızca Y1961, Y1962 ve Y1963 sütunlarının altına düşen satırların toplamını hesaplamak istiyorum. Elde edilen veri çerçevesi aşağıdaki gibi görünmelidir:
Kod Ülke Ürün_Kodu Ürün Ele_Kodu Birim Y1961 Y1962 Y1963
2 Afganistan 15 C3 5312 Ha 20 40 60
4 Angola 25 C4 7312 Ha 60 80 100
Şu anda bunu yapıyorum:
df.groupby('Country').sum()
Ancak bu, Item_Code sütunundaki değerleri de toplar. Hangi sütunların sum()
işlemine dahil edileceğini ve hangilerinin hariç tutulacağını belirtmenin herhangi bir yolu var mı?
Bir groupby'nin sütunlarını seçebilirsiniz:
In [11]: df.groupby(['Country', 'Item_Code'])[["Y1961", "Y1962", "Y1963"]].sum()
Out[11]:
Y1961 Y1962 Y1963
Country Item_Code
Afghanistan 15 10 20 30
25 10 20 30
Angola 15 30 40 50
25 30 40 50
Aktarılan listenin sütunların bir alt kümesi olması gerektiğini unutmayın, aksi takdirde bir KeyError görürsünüz.
agg` fonksiyonu bunu sizin için yapacaktır. Sütunları ve işlevi sütun, çıktı ile bir dict olarak iletin:
df.groupby(['Country', 'Item_Code']).agg({'Y1961': np.sum, 'Y1962': [np.sum, np.mean]}) # Added example for two output columns from a single input column
Bu, yalnızca group by sütunlarını ve belirtilen aggregate sütunlarını görüntüleyecektir. Bu örnekte, 'Y1962' öğesine uygulanan iki agg işlevini dahil ettim.
Tam olarak görmeyi umduğunuz şeyi elde etmek için, diğer sütunları gruba dahil edin ve çerçevedeki Y değişkenlerine toplamları uygulayın:
df.groupby(['Code', 'Country', 'Item_Code', 'Item', 'Ele_Code', 'Unit']).agg({'Y1961': np.sum, 'Y1962': np.sum, 'Y1963': np.sum})
Birçok sütuna uygulamak için daha genel bir yol arıyorsanız, yapabileceğiniz şey sütun adlarının bir listesini oluşturmak ve bunu gruplandırılmış veri çerçevesinin indeksi olarak geçmektir. Sizin durumunuzda, örneğin:
columns = ['Y'+str(i) for year in range(1967, 2011)]
df.groupby('Country')[columns].agg('sum')