大熊猫的变换方法不能通过多种方法

问题描述 投票:1回答:2

我想将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'”

python pandas
2个回答
1
投票

它可以工作,但使用的函数不能是聚合函数,如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不得改变组。不支持变异,可能会产生意外结果。

2
投票

好像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
© www.soinside.com 2019 - 2024. All rights reserved.