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.apply():
dataframe.transform():
作用: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