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

如何在R语言中按自定义日周期为日期时间分配实验夜整数编号?

解决方案:创建「Experiment Night」列(自定义昼夜周期)

核心思路

由于实验夜定义为当日12:00 PM至次日12:00 PM,我们需要先将每个时间点映射到对应的「实验夜基准日期」:

  • 时间≥12:00的记录,基准日期为当前日期
  • 时间<12:00的记录,基准日期为前一天日期

随后以9月1日为起始点,计算每个基准日期与起始日的天数差,加1即可得到实验夜编号(1至45)。


方法一:使用DateTime列处理(推荐)

利用已有的DateTime列直接操作,准确性更高:

  1. 确保DateTime列为datetime类型:
import pandas as pd
df['DateTime'] = pd.to_datetime(df['DateTime'])
  1. 生成实验夜基准日期:
df['Base_Date'] = df['DateTime'].apply(
    lambda x: x.date() if x.hour >= 12 else x.date() - pd.Timedelta(days=1)
)
  1. 计算实验夜编号:
# 设置实验起始日期(替换为你的数据年份)
start_date = pd.to_datetime('2023-09-01').date()
end_date = pd.to_datetime('2023-10-15').date()

df['Experiment Night'] = df['Base_Date'].apply(
    lambda x: (x - start_date).days + 1 if start_date <= x <= end_date else None
)

方法二:使用单独的Month/Day/Time列处理

如果无法使用DateTime列,可先组合生成datetime对象再处理:

  1. 组合日期时间:
# 替换Year为你的数据年份
df['Combined_DateTime'] = pd.to_datetime(
    df[['Month', 'Day']].assign(Year=2023).astype(str).agg('-'.join, axis=1) + ' ' + df['Time']
)
  1. 重复方法一中的基准日期生成和编号计算步骤即可。

验证示例

原始DateTimeBase_DateExperiment Night
2023-09-01 13:00:002023-09-011
2023-09-02 01:00:002023-09-011
2023-09-02 12:30:002023-09-022
2023-10-15 12:00:002023-10-1545

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:02:31