首页 > 解决方案 > 如何使用 lambda 重命名 DataFrame 列?

问题描述

我正在做:

df.apply(lambda x: x.rename(x.name + "_something"))

我认为这应该返回带有 _something 附加到所有列的列,但它只返回相同的 df。

我究竟做错了什么?

编辑:我需要逐列处理系列,而不是数据框对象,因为我将x在 lambda 中应用其他转换,此处未显示。

编辑 2 完整上下文

我有一个时间序列数据框,我正在尝试从数据中生成特征。

我写了一堆原始函数,例如:

def sumn(n, s):
    return s.rolling(n).sum().rename(s.name + "_sum_" + str(n))

当我将它们应用于 时Series,它会很好地重命名它们。

当我将它们应用于 a 中DataFrame的列时,数值转换会通过,但rename不起作用。

(我想这意味着 aDataFrame不仅仅是 的集合Series,这很可能意味着我现在必须明确地重命名 df 上的东西)

标签: pythonpandas

解决方案


我认为你可以使用 pd.concat 来做到这一点:

pd.concat([df[e].rename(df[e].name+'_Something') for e in df],1)

在列表推导中,您可以添加其他逻辑:

df[e].rename(df[e].name+'_Something').apply(...)

如果直接使用 df.apply,则无法更改列名。我想不出办法


推荐阅读