You need to enable JavaScript to run this app. 如何在DataFrame中按DateTimeStarted列分组,保留组尾Value为1其余置0且保留原0值
优惠活动
大模型
产品
解决方案
定价
更多

如何在DataFrame中按DateTimeStarted列分组,保留组尾Value为1其余置0且保留原0值

按DateTime分组修改Value的实现方法

核心逻辑

  • 首先定位每个DateTimeStarted分组下的最后一行位置
  • 仅对原本Value为1的行做调整:同组内非最后一行的1全部置为0,组内最后一行的1保留原值
  • 所有原本Value为0的行全程不参与修改,完全保留原有取值

具体代码实现

第一步:提取每个时间分组的最后一行索引

last_row_idx = df.groupby("DateTimeStarted").tail(1).index

第二步:生成调整后的Value列,可按需选择实现方式

  • 中小数据量下的简洁写法:
df["Value"] = [
    1 if (val == 1) and (idx in last_row_idx) else 0
    for idx, val in zip(df.index, df["Value"])
]
  • 大数据量下的高效向量化写法:
# 初始化新列全为0
new_val = pd.Series(0, index=df.index)
# 定位需要保留为1的位置:满足「原取值为1」+「属于对应时间分组的最后一行」两个条件
keep_1_mask = (df["Value"] == 1) & df.index.isin(last_row_idx)
new_val[keep_1_mask] = 1
df["Value"] = new_val

效果匹配说明

代码运行结果和你给出的目标输出完全一致:

  • 2020-12-19 16:00:00分组(共19行、原Value全为1):仅最后一行(索引18)保留1,其余全部置为0
  • 2020-12-26 18:00:00分组(共2行、原Value全为1):仅最后一行(索引20)保留1,前一行改为0
  • 所有原Value为0的行,无论是否属于重复时间分组,全部保持原有取值不变

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 08:06:11