You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pandas一行代码按指定周期为DataFrame列生成.diff衍生列?

一行代码实现Pandas多特征多周期.diff衍生列生成

需要为DataFrame指定特征按不同周期调用diff()生成衍生列(如foo_diff1、bar_diff3这类命名),要求一行代码完成。现有基于pd.concat()+map()的代码无法遍历周期列表,需修正。

示例数据

import pandas as pd
import numpy as np

df = pd.DataFrame({
    "Category":["A"]*10+["B"]*50+["C"]*15+["D"]*100,
    "foo":[np.random.random_sample() for i in range(175)],
    "bar":[np.random.random_sample() for i in range(175)]
})
dict_diff={"foo":[1,2],"bar":[3,4]}

原代码问题分析

原代码直接将字典值(周期列表)传入diff(periods=...),但diff()的periods参数仅接受单个数值,无法处理列表,因此无法遍历每个周期生成对应衍生列。

修正后的一行代码

pd.concat(map(lambda x: df[x[0]].diff(periods=x[1]).rename(f"{x[0]}_diff{x[1]}"), ((col, period) for col, periods in dict_diff.items() for period in periods)), axis=1)

代码说明

  • 用生成器表达式((col, period) for col, periods in dict_diff.items() for period in periods)将原字典的键值对展开为**(列名, 单个周期)**的元组序列,例如把{"foo":[1,2]}拆成("foo",1)、("foo",2)两组数据
  • 再通过map()对每个元组调用diff()并按规则命名列,最后用pd.concat()横向拼接所有衍生列

运行代码后,会生成foo_diff1、foo_diff2、bar_diff3、bar_diff4四个衍生列,每个列对应原特征指定周期的差分结果。

内容的提问来源于stack exchange,提问作者PeCaDe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 17:45:32