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

基于条件与groupby为Pandas DataFrame逐行填充值

Pandas 数据处理需求

现有包含CLI_CD和CURA_T1列的Pandas DataFrame,示例数据如下:

CLI_CDCURA_T1
30
30
30
30
31
31
31
31
31
31
30
30

需要新增名为CURA_ALT的列,要求如下:

  • 按CLI_CD分组
  • 识别每组中CURA_T1首次出现1的位置
  • 从该行开始,仅对CURA_T1为1的行累加100/6的取整结果(保留整数)
  • 其余行填充0

预期输出的DataFrame如下:

CLI_CDCURA_T1CURA_ALT
300
300
300
300
3117
3133
3150
3167
3183
31100
300
300

解决方案

通过Pandas分组操作、位置标记和序列计算可实现需求,代码如下:

import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    'CLI_CD': [3]*12,
    'CURA_T1': [0,0,0,0,1,1,1,1,1,1,0,0]
})

def process_group(group):
    # 定位组内CURA_T1首次出现1的索引
    first_one_idx = group[group['CURA_T1'] == 1].index.min()
    
    # 初始化CURA_ALT列为0
    group['CURA_ALT'] = 0
    
    if not pd.isna(first_one_idx):
        # 筛选从首次1开始且CURA_T1为1的行
        target_rows = group.loc[first_one_idx:][group['CURA_T1'] == 1]
        # 计算累加值并取整
        step = 100 / 6
        accum_values = [round(step * i) for i in range(1, len(target_rows)+1)]
        # 赋值给对应行
        group.loc[target_rows.index, 'CURA_ALT'] = accum_values
    
    return group

# 分组应用处理函数
df = df.groupby('CLI_CD', group_keys=False).apply(process_group)

print(df)

代码说明

  1. 构造测试数据:创建与题目示例一致的DataFrame;
  2. 分组处理逻辑:
    • 定位每组中CURA_T1首次出现1的位置;
    • 初始化CURA_ALT列为0;
    • 筛选出从首次1开始且CURA_T1为1的行,计算100/6的累加取整值并赋值;
  3. 分组应用:按CLI_CD分组后执行处理逻辑,得到最终结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 15:46:24