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

如何将气旋数据的pd.DataFrame转换为按stormid统计的累计天数格式?

解决方案

首先确保date字段为datetime类型,否则无法正确计算日期差:

import pandas as pd

# 转换日期格式
df['date'] = pd.to_datetime(df['date'])

接下来按stormid分组聚合,生成需求格式的DataFrame:

# 分组聚合
aggregated_df = df.groupby('stormid').agg(
    start_date=('date', 'min'),  # 起始日期:每组最小日期
    end_date=('date', 'max'),    # 结束日期:每组最大日期
    days=('date', lambda x: (x.max() - x.min()).days + 1),  # 持续天数(含首尾)
    season=('season', 'first')   # 季节:取每组第一条记录的季节(同一stormid季节应一致)
).reset_index()

# 重命名列名并调整顺序
aggregated_df.rename(columns={'start_date': 'start date', 'end_date': 'end date'}, inplace=True)
aggregated_df = aggregated_df[['start date', 'end date', 'days', 'season', 'stormid']]

如果你的“累计天数”指的是该气旋的记录条数(比如单日内有多条记录),只需把days的聚合逻辑改成count:

days=('date', 'count')

执行后得到的aggregated_df就会符合你给出的示例格式:

start dateend datedaysseasonstormid
01970-01-041970-01-1181970SH071870

(注:示例中天数为15是因为原数据中该stormid包含15条记录,若用日期差计算则为8天,可根据实际需求选择对应逻辑)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 11:55:21