pandas agg apply,transformの違い


agg,apply,transformはdataframeを演算することができ,以下ではこの3つの方法を比較する.
作用:dataframe.Agg():集約操作のみdataframe.apply()の作用対象はdataframe dataframeである.transform()はdataframeの各seriesに対してtransform操作を行い、返される構造は元のdataframeと一致する
許容可能なfuncタイプ:agg:複数の集約関数を同時に使用するか、各列に異なる集約関数apply()を割り当てることができます.単純な和関数や複雑なseries間のインタラクティブ関数を含むカスタム関数と、agg()関数やpython内蔵関数、例えばsum、max、min、'count'などのメソッドtransform():カスタムseriesとのインタラクティブな関数は使用できません.
EXAMPLES dataframe.agg() :
# dataframe          

df = pd.DataFrame([[1, 2, 3],
                   [4, 5, 6],
                   [7, 8, 9],
                   [np.nan, np.nan, np.nan]],
                columns=['A', 'B', 'C'])
  :
df.agg(['sum', 'min'])
        A     B     C
sum  12.0  15.0  18.0
min   1.0   2.0   3.0
# dataframe            
df.agg({'A' : ['sum', 'min'], 'B' : ['min', 'max']})

#  :

        A    B
max   NaN  8.0
min   1.0  2.0
sum  12.0  NaN

dataframe.apply():
#         :
df = pd.DataFrame([[4, 9],] * 3, columns=['A', 'B'])
df
   A  B
0  4  9
1  4  9
2  4  9

df.apply(np.sum, axis=1)
#  :
0    13
1    13
2    13
dtype: int64

#      :
np.random.seed(2764)
df=DataFrame({'M':list('ABCBA'),'N':list('XYZXY'),'J':[1,4,6,7,2],'K':[5,3,3,2,6]})

def func(df):
    return df['J']-df['K']

grouped=df.groupby(df['M']).apply(func)
print(grouped)
#  :
M   
A  0   -4
   4   -4
B  1    1
   3    5
C  2    3
dtype: int64


dataframe.transform():
df = pd.DataFrame({'A': range(3), 'B': range(1, 4)})
 df
   A  B
0  0  1
1  1  2
2  2  3

 df.transform(lambda x: x + 1)
   A  B
0  1  2
1  2  3
2  3  4

#transform         :
df = pd.DataFrame({'A': range(3), 'B': range(1, 4)})
trans=df.transform([np.sqrt, np.exp])

          A                   B           
       sqrt       exp      sqrt        exp
0  0.000000  1.000000  1.000000   2.718282
1  1.000000  2.718282  1.414214   7.389056
2  1.414214  7.389056  1.732051  20.085537