【问题标题】:Using multiple lambda functions with a pandas dataframe将多个 lambda 函数与 pandas 数据框一起使用
【发布时间】:2019-02-10 19:12:58
【问题描述】:

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

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: 无法对带有嵌套的返回执行重命名 字典

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

【问题讨论】:

  • 这没有意义。请包含minimal reproducible example
  • 如果它接受函数但依赖__name__ 属性来区分它们,我倾向于认为这是熊猫中的一个错误。

标签: python pandas lambda


【解决方案1】:

lambda函数在lambda创建多个para时会出现重名错误的问题

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])

【讨论】:

  • 太好了!非常感谢!
  • @BillKet yw :-) 顺便说一句,如果这是您需要的,愿意接受吗?
【解决方案2】:
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]})

另外,试试这个

【讨论】:

  • 谢谢,但我仍然遇到同样的错误。这个名字纯粹来自“lambda”。它不包含变量。
  • 我认为@Wen-Ben 的答案可能是这样。我也学到了一些新东西
猜你喜欢
  • 1970-01-01
  • 2019-03-14
  • 1970-01-01
  • 2021-01-25
  • 2016-10-06
  • 1970-01-01
  • 2017-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多