Aşağıdaki veri çerçevesini düşünün:
A B C D
0 foo one 0.162003 0.087469
1 bar one -1.156319 -1.526272
2 foo two 0.833892 -1.666304
3 bar three -2.026673 -0.322057
4 foo two 0.411452 -0.954371
5 bar two 0.765878 -0.095968
6 foo one -0.654890 0.678091
7 foo three -1.789842 -1.130922
Aşağıdaki komutlar çalışır:
> df.groupby('A').apply(lambda x: (x['C'] - x['D']))
> df.groupby('A').apply(lambda x: (x['C'] - x['D']).mean())
ancak aşağıdakilerden hiçbiri işe yaramaz:
> df.groupby('A').transform(lambda x: (x['C'] - x['D']))
ValueError: could not broadcast input array from shape (5) into shape (5,3)
> df.groupby('A').transform(lambda x: (x['C'] - x['D']).mean())
TypeError: cannot concatenate a non-NDFrame object
Neden? Belgelerdeki örnek,transform bir grubu çağırmanın bir kişinin satır bazında işlem gerçekleştirmesine izin verdiğini düşündürmektedir :
# Note that the following suggests row-wise operation (x.mean is the column mean)
zscore = lambda x: (x - x.mean()) / x.std()
transformed = ts.groupby(key).transform(zscore)
Başka bir deyişle, dönüşümün esasen belirli bir uygulama türü olduğunu düşündüm (toplanmayan). Nerede yanılıyorum?
Referans olarak, yukarıdaki orijinal veri çerçevesinin yapısı aşağıdadır:
df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar',
'foo', 'bar', 'foo', 'foo'],
'B' : ['one', 'one', 'two', 'three',
'two', 'two', 'one', 'three'],
'C' : randn(8), 'D' : randn(8)})
zscore) belgelerdeki örneğe bakarsanız, transformher birinin xiçinde bir öğe olduğunu varsayan groupve ayrıca gruptaki öğe başına bir değer döndüren bir lambda işlevi alır . Neyi kaçırıyorum?
applytüm df'den geçer, ancak transformher sütunu ayrı ayrı bir Seri olarak geçirir. 2) applyherhangi bir şekil çıktısını döndürebilir (skaler / Seri / DataFrame / dizi / liste ...), oysa transformgrupla aynı uzunlukta bir dizi (1D Serisi / dizi / liste) döndürmelidir. Bu yüzden OP'nin buna ihtiyacı apply()yok transform(). Bu iyi bir soru çünkü doktor her iki farklılığı da net bir şekilde açıklamadı. ( apply/map/applymapveya diğer şeyler arasındaki

transform, bağımsız değişkenle bir sayı, satır veya aynı şekli döndürmelidir. bir sayı ise, sayı gruptaki tüm öğelere ayarlanır, bir satırsa gruptaki tüm satırlara yayınlanır. Kodunuzda lambda işlevi, gruba yayınlanamayan bir sütun döndürür.