对熊猫数据框使用多个lambda函数

时间:2019-02-10 19:12:59

标签: python pandas lambda

我有一个pd数据帧,其中的“ process_id”列在多个时间步中具有与之关联的不同参数。我想从中提取一些信息并将它们放入一个新的数据框中(因此,我不必使用数据的所有详细信息)。下面是我的意思的示例,在此我为每个“ process_id”保留每个参数的最小值,最大值,平均值和标准差,并且我还定义了一个lambda函数来保存最近5个时间步长中参数的平均值:< / p>

features = df.groupby('process_id').agg(['min', 'max', 'mean', 'std', lambda x: x.tail(5).mean()])

这很好用,并且lambda函数将表中参数的名称更改为以下形式:“ parameter_lambda”(不确定如何,但它可以工作)。现在的问题是,如果我想添加另一个lambda函数,则类似以下内容(或任何其他lambda定义):

features = df.groupby('process_id').agg(['min', 'max', 'mean', 'std', lambda x: x.tail(5).mean(),lambda x: x.iloc[0:int(len(df)/5)].mean()])

我收到此错误:

  

函数名称必须唯一,可以找到多个名称

这很有意义,因为两个lambda函数在数据帧中都具有相同的名称。但是我不知道该如何解决。

我尝试过这样的事情:

df.groupby('dummy').agg({'returns':{'Mean': np.mean, 'Sum': np.sum}})

here所述,但出现此错误:

  

SpecificationError:无法为带有嵌套的退货执行重命名   字典

有人可以帮助我吗?谢谢!

2 个答案:

答案 0 :(得分:4)

lambda函数将存在由lambda

创建的多个参数时名称重复错误的问题。
fuc1=lambda x: x.tail(5).mean()
fuc1.__name__ = 'tail_mean'

fuc2=lambda x: x.iloc[0:int(len(df)/5)].mean()
fuc2.__name__ = 'len_mean'

features = df.groupby('process_id').agg(['min', 'max', 'mean', 'std', fuc1,fuc2])

答案 1 :(得分:0)

features = df.groupby('process_id').agg(['min', 'max', 'mean', 'std', lambda x: x.tail(5).mean(),lambda y: y.iloc[0:int(len(df)/5)].mean()])

尝试使用xy而不是xx

df.groupby('dummy').agg({'returns': [np.mean, np.sum]})

还可以尝试