我想将2个方法传递给pazas的transform
方法,因为API说它可以传递一个函数列表或列名称 - >函数。我传递了一个函数列表,但它不起作用:
import pandas as pd
import numpy as np
df = pd.DataFrame({'rti':['a','a','b','c','b','c','a'],'ts':[10,10,9,12,9,13,11],'rs':[8,8,22,11,12,11,9]})
df.groupby('rti').transform(['mean','sum'])
它显示:“TypeError:unhashable type:'list'”
它可以工作,但使用的函数不能是聚合函数,如sum,max或min。
>>> df.transform([np.abs, np.sign])
rs ts
absolute sign absolute sign
0 8 1 10 1
1 8 1 10 1
2 22 1 9 1
3 11 1 12 1
4 12 1 9 1
5 11 1 13 1
6 9 1 11 1
请参阅文档here。请注意,transform
对象的groupby
方法只接受一个函数(不是用于数据帧转换方法的函数列表)。
根据tranform
对象的groupby
方法的doc字符串:
签名:gb.transform(func,* args,** kwargs)
Docstring:调用函数在每个组上生成类似索引的DataFrame,并返回与填充了转换值的原始对象具有相同索引的DataFrame
参数
f:函数应用于每个组的函数
笔记
如果您需要知道您正在处理哪个组,则为每个组赋予属性“名称”。
目前的实施对f提出了三个要求:
- f必须返回与输入子帧具有相同形状的值,或者可以广播到输入子帧的形状。例如,f返回一个标量,它将被广播以具有与输入子帧相同的形状。
- 如果这是一个DataFrame,则f必须在子帧中逐列支持应用程序。如果f还支持对整个子帧的应用,则从第二块开始使用快速路径。
- f不得改变组。不支持变异,可能会产生意外结果。
好像transform
不接受功能列表,在github中打开问题
df.groupby('rti').agg(['mean','sum']).reindex(df.rti)
Out[12]:
rs ts
mean sum mean sum
rti
a 8.333333 25 10.333333 31
a 8.333333 25 10.333333 31
b 17.000000 34 9.000000 18
c 11.000000 22 12.500000 25
b 17.000000 34 9.000000 18
c 11.000000 22 12.500000 25
a 8.333333 25 10.333333 31