当前位置: 代码迷 >> python >> 大熊猫的变换方法不能通过多种方法
  详细解决方案

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

热度:37   发布时间:2023-06-19 09:30:52.0

我想传递2个方法来transform pandas方法,因为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'”

好像transform不接受函数列表,在打开问题

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

它可以工作,但使用的函数不能是聚合函数,如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

请参阅的文档。 请注意, groupby对象的transform方法只接受一个函数(不是用于groupby transform方法的函数列表)。

每对的文档字符串tranform的方法groupby对象:

签名:gb.transform(func,* args,** kwargs)

Docstring:调用函数在每个组上生成类似索引的DataFrame,并返回与填充了转换值的原始对象具有相同索引的DataFrame

参数

f:函数应用于每个组的函数

笔记

如果您需要知道您正在处理哪个组,则为每个组赋予属性“名称”。

目前的实施对f提出了三个要求:

  • f必须返回与输入子帧具有相同形状的值,或者可以广播到输入子帧的形状。 例如,f返回一个标量,它将被广播以具有与输入子帧相同的形状。
  • 如果这是一个DataFrame,则f必须在子帧中逐列支持应用程序。 如果f还支持对整个子帧的应用,则从第二块开始使用快速路径。
  • f不得改变组。 不支持变异,可能会产生意外结果。