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

如何用Pandas条件Groupby取min及apply实现SubGroup的Output列生成

按SubGroup规则填充Output列的实现方案

嘿,我来帮你搞定这个DataFrame的填充需求!根据你给出的规则,我们可以通过groupby结合apply来实现,步骤和代码如下:

先明确填充逻辑

对每个SubGroup:

  • 如果组内存在非空的HardDate,就用这个HardDate填充该组所有行的Output列
  • 如果组内没有有效的HardDate,就筛选出Values不为空的记录,取其中最早(最小)的BookDate来填充

代码实现

首先确保你的日期列已经转为datetime类型(如果还没转的话):

import pandas as pd

# 转换日期列格式为datetime类型
df[['BookDate', 'HardDate']] = df[['BookDate', 'HardDate']].apply(pd.to_datetime)

然后定义处理每个分组的函数,再通过apply批量处理:

def fill_output_group(group):
    # 提取组内非空的HardDate
    valid_hard_dates = group['HardDate'].dropna()
    if not valid_hard_dates.empty:
        # 取第一个有效的HardDate(假设同组的有效值是统一的)
        fill_value = valid_hard_dates.iloc[0]
    else:
        # 筛选Values非空的行,提取对应的BookDate
        valid_book_dates = group[group['Values'].notna()]['BookDate']
        # 取最小的BookDate,若没有符合条件的记录则设为缺失值
        fill_value = valid_book_dates.min() if not valid_book_dates.empty else pd.NA
    
    # 给当前组的Output列统一赋值
    group['Output'] = fill_value
    return group

# 按SubGroup分组并应用填充函数,group_keys=False避免新增分组索引列
df_filled = df.groupby('SubGroup', group_keys=False).apply(fill_output_group)

代码解释

  • groupby('SubGroup', group_keys=False):按SubGroup维度分组,group_keys=False可以避免结果里多出不必要的分组索引列
  • fill_output_group函数:针对每个子分组做逻辑判断,先检查HardDate是否有有效值,没有的话再去匹配Values非空的最小BookDate,最后给整个组的Output列统一赋值
  • 额外处理了极端情况:如果某个组既没有有效HardDate,也没有Values非空的记录,会把Output设为pd.NA,你可以根据实际业务需求修改这个默认值

比如用你给出的示例数据,Group1的SubG1有有效的HardDate10/10/2010,所以该组所有行的Output都会是这个日期;如果某个SubGroup没有HardDate有效值,就会从Values非空的记录里挑最早的BookDate来填充。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:43:03