如何在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/Night | Covered distance |
|---|---|
| Day | 0.012068 |
| Night | 0.001072 |
这样就能清晰看到鱼类在白天和夜晚的总移动距离差异,进而判断主要活动时段啦。
内容的提问来源于stack exchange,提问作者toms
相关产品推荐
相关产品推荐

