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

Pandas按ID分组计算时间差并填充指定列求助

Pandas 按规则填充列解决方案

前提准备

首先确保你的x、y、z列是datetime类型,如果不是,先转换:

import pandas as pd
import numpy as np

# 转换为datetime类型
df[["x", "y", "z"]] = df[["x", "y", "z"]].apply(pd.to_datetime)

1. 填充Time to x列

直接提取x列对应的小时数,分两种场景处理:

  • 若x是datetime类型,取小时部分:
df["Time to x"] = df["x"].dt.hour
  • 若x是timedelta(时间差)类型,转成总小时数:
df["Time to x"] = df["x"].dt.total_seconds() / 3600

2. 填充Time to y列

按ID分组计算y与x的时间差(转成小时),仅保留y非空的行:

# 分组计算时间差并转成小时
time_diff_y = df.groupby("ID").apply(lambda grp: grp["y"] - grp["x"]).dt.total_seconds() / 3600
# 仅填充y非空的行,其余设为NaN
df["Time to y"] = np.where(df["y"].notna(), time_diff_y, np.nan)

3. 填充Time to z列

按ID分组计算z与y的时间差(转成小时),仅保留z非空的行:

# 分组计算时间差并转成小时
time_diff_z = df.groupby("ID").apply(lambda grp: grp["z"] - grp["y"]).dt.total_seconds() / 3600
# 仅填充z非空的行,其余设为NaN
df["Time to z"] = np.where(df["z"].notna(), time_diff_z, np.nan)

补充说明

  • 如果需要将时间差转为整数小时,可在计算后追加.astype(int)
  • 若每个ID分组内的x/y/z是一一对应的,上述代码可直接运行;组内有多行时,会自动按行匹配计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 16:42:19