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

如何在Python中对DataFrame浮点列批量应用自定义函数生成新列

可行,以下是具体实现方案及替代方法

基础实现方案(适合新手理解)

假设你的DataFrame名为df,日期列名为Date,已导入numpy和pandas:

  1. 确认收益率计算函数(若未定义可直接用下方代码):
import numpy as np

def calculate_return(x):
    return np.log(x.div(x.shift(3)))
  1. 筛选需要处理的浮点类型列(排除日期列):
# 获取所有浮点类型列
float_columns = df.select_dtypes(include=['float64', 'float32']).tolist()
# 移除日期列(避免误处理)
float_columns = [col for col in float_columns if col != 'Date']
  1. 批量应用函数生成新列:
for col in float_columns:
    df[f"{col}_Ret"] = calculate_return(df[col])

更简洁的实现方式

方式1:字典推导式+assign方法(一行完成)

df = df.assign(**{
    f"{col}_Ret": np.log(df[col] / df[col].shift(3)) 
    for col in df.select_dtypes(include=['float64', 'float32']).columns 
    if col != 'Date'
})

方式2:先处理再合并

# 单独处理目标列生成收益率DataFrame
ret_df = df[float_columns].apply(lambda x: np.log(x/x.shift(3)))
# 重命名列名
ret_df.columns = [f"{col}_Ret" for col in ret_df.columns]
# 合并回原DataFrame
df = pd.concat([df, ret_df], axis=1)

注意事项

  • 由于使用shift(3),新生成的收益率列前3行会是NaN值,可根据模型需求用df.dropna()删除这些行,或用df.fillna()填充(比如0、均值等)。
  • 若DataFrame中存在其他非浮点、非日期的列,上述方法会自动跳过,无需额外过滤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 01:40:26