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

基于DataFrame中另一列生成新的序列列

解决DataFrame中生成条件触发的递增序列列问题

你的核心需求是:当Head列的值超过指定阈值To=1.34时,生成一个与Head步长一致的递增序列,在此之前的值保持为0。你的尝试中使用lambda结合列表推导的方式无法实现,因为apply是逐元素处理,无法跟踪元素在序列中的位置来生成连续的递增序列。

以下是两种高效的实现方式,优先使用向量化操作(避免逐元素循环,提升效率):

方法一:使用numpy生成序列并赋值

import numpy as np
import pandas as pd

To = 1.34
Head = np.linspace(0,4,49)
Outfall = pd.DataFrame(Head, columns=['Head'])

# 计算Head列的步长
step = Head[1] - Head[0]
# 找到第一个Head值大于To的索引位置
start_idx = Outfall[Outfall['Head'] > To].index[0]

# 初始化OHead列为全0
Outfall['OHead'] = 0
# 从start_idx开始,生成递增的序列(step, 2*step, 3*step...)
Outfall.loc[start_idx:, 'OHead'] = np.arange(1, len(Outfall) - start_idx + 1) * step

方法二:使用numpy.where简化赋值

import numpy as np
import pandas as pd

To = 1.34
Head = np.linspace(0,4,49)
Outfall = pd.DataFrame(Head, columns=['Head'])

step = Head[1] - Head[0]
start_idx = Outfall[Outfall['Head'] > To].index[0]

# 用numpy.where实现条件赋值,同时计算递增序列
Outfall['OHead'] = np.where(
    Outfall['Head'] <= To,
    0,
    (Outfall.index - start_idx + 1) * step
)

验证结果

运行上述代码后,Outfall的OHead列会符合你的预期:

  • 前17行(索引0到16)的OHead均为0
  • 从索引17开始,OHead依次为0.083333、0.166667、0.250000...与Head的步长完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 20:48:22