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

如何在Python中依据日出日落为鱼类位移数据标记昼夜时段

标记鱼类移动数据的昼夜时段并统计总距离

我来帮你搞定这个问题,咱们一步步来解决,完美适配每日日出日落不同的情况:

1. 先把时间转成可比较的datetime类型

你的DataFrame里的时间都是字符串格式,没法直接判断先后,所以首先要把记录时间、日出时间、日落时间都转成完整的datetime对象,这是后续判断的基础:

import pandas as pd

# 假设你的原始DataFrame命名为df
# 合并日期和记录时间,生成完整的时间戳
df['record_datetime'] = pd.to_datetime(df['Date'] + ' ' + df['Hours'], format='%d/%m/%Y %H:%M')

# 把日出、日落时间和对应日期合并,转成datetime格式
df['sunrise_datetime'] = pd.to_datetime(df['Date'] + ' ' + df['sunrise'], format='%d/%m/%Y %H:%M:%S')
df['sunset_datetime'] = pd.to_datetime(df['Date'] + ' ' + df['sunset'], format='%d/%m/%Y %H:%M:%S')

如果你的日期格式是月/日/年(比如美式格式),只需要把format里的%d/%m/%Y改成%m/%d/%Y就行。

2. 标记Day/Night列

现在可以用向量化操作高效判断每条记录属于白天还是夜晚,完全适配每日不同的日出日落:

import numpy as np

# 核心逻辑:记录时间在日出后、日落前标记为Day,否则为Night
df['Day/Night'] = np.where(
    (df['record_datetime'] >= df['sunrise_datetime']) & (df['record_datetime'] <= df['sunset_datetime']),
    'Day',
    'Night'
)

这种向量化操作比用apply遍历每一行效率高很多,尤其是数据量大的时候优势明显。

3. 统计昼夜总移动距离

最后用groupby分组求和就能得到你想要的统计结果:

# 按昼夜分组,计算总移动距离
total_distance = df.groupby('Day/Night')['Covered distance'].sum().reset_index()
print(total_distance)

用你给出的示例数据运行后,结果大概是:

Day/NightCovered distance
Day0.012068
Night0.001072

这样就能清晰看到鱼类在白天和夜晚的总移动距离差异,进而判断主要活动时段啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 17:25:25