在使用
让我们举个例子:
我们如何执行以下期望输出的操作:
groupby
后,当使用agg
时,如果传递了一个columns:functions
的字典,则函数将应用于相应的列。然而,这种语法在使用transform
时不起作用。是否有另一种方法可以在transform
中应用多个函数?让我们举个例子:
import pandas as pd
df_test = pd.DataFrame([[1,2,3],[1,20,30],[2,30,50],[1,2,33],[2,4,50]],columns = ['a','b','c'])
Out[1]:
a b c
0 1 2 3
1 1 20 30
2 2 30 50
3 1 2 33
4 2 4 50
def my_fct1(series):
return series.mean()
def my_fct2(series):
return series.std()
df_test.groupby('a').agg({'b':my_fct1,'c':my_fct2})
Out[2]:
c b
a
1 16.522712 8
2 0.000000 17
前面的例子展示了如何在agg
中对不同的列应用不同的函数,但是如果我们想要转换这些列而不进行聚合,那么就不能再使用agg
。因此:
df_test.groupby('a').transform({'b':np.cumsum,'c':np.cumprod})
Out[3]:
TypeError: unhashable type: 'dict'
我们如何执行以下期望输出的操作:
a b c
0 1 2 3
1 1 22 90
2 2 30 50
3 1 24 2970
4 2 34 2500