varsayalım bir dataframe şöyle var tanımlamak için uygula vs:Python Pandalar: Agrega kullanma yeni sütunlar
n = 20
dim1 = np.random.randint(1, 3, size=n)
dim2 = np.random.randint(3, 5, size=n)
data1 = np.random.randint(10, 20, size=n)
data2 = np.random.randint(1, 10, size=n)
df = pd.DataFrame({'a': dim1, 'b': dim2 ,'val1': data1, 'val2': data2})
Ben grup akıllıca döndüren bir işlev tanımlarsanız: teker
def h(x):
if x['val2'].sum() == 0:
return 0
else:
return (x['val1'].sum())*1.0/x['val2'].sum()*1.0
Gruplamasını sütunların ve döndürür bir sonuç toplayarak:
df.groupby(['a']).aggregate(h)['val1']
o d mevcut tüm sütunları dönüştürür Gerçi iki sütun tarafından yeni bir sütun
Gruplama eklemek yerine sonuç esired agrega kullanırken bir hata ile sonuçlanır:
df.groupby(['a','b']).aggregate(h)['val1']
KeyError: 'val2'
Ama iş gibi görünüyor uygulamak için agrega anahtarlama.
- Neden çalışmalarını uygulamak ve aggregte değildir:
iki soru var?
- Bir veri kümesini bir grup anahtarla grupladıktan sonra, grup değerlerini yeni bir sütun olarak birleştiren bir işlev kullanmak isterim, bunu yapmanın en iyi yolu nedir?
Şimdiden teşekkürler.
İyi sorum var.Aslında, def testi (x) gibi bir test fonksiyonunu tanımlarsanız: print x; x.sum() 'i döndürün ve her iki durumda da 'topla' komutunu çağırın, ilk durumda' x 'ın bir DataFrame olduğunu ve ikinci durumda 'x''in bir Series olduğunu görürsünüz. her zaman DataFrame). Şu anda kodun içine girmek için zamanım yok, ve eminim ki bazı pandalar geliştiriciler bu davranışı ortaya çıkaracak ve açıklayacaktır :) –
2'de sorduğunuzdan emin değilsiniz (belki de [cumcount] (http://pandas.pydata.org/pandas-docs/dev/groupby.html#enumerate-group-items)?) –
Bu grup çalışmasıyla tam olarak neler olup bittiğini öğrenmek için uğraştım. Romanın belirttiği gibi, agg'e geçen ilk argüman bir dizidir, bu nedenle birden çok sütundaki değerlere göre aggre etmek istiyorsanız, otomatik olarak iletilen dizinin indeks değerlerine dayanarak işlevdeki ikinci sütunu çağırmanız gerekir. Uygula, her zaman işaret ettiği gibi veri çerçevesi olarak geçer. Bazı gerçekten garip davranışları görmek için dönüşüm kontrolünü görmek istiyorsanız, diziye ve dataframe fonksiyonun ilk argümanı olarak geçiyor gibi görünüyor. Oldukça kafa karıştırıcı IMO –