如何将气旋数据的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 date | end date | days | season | stormid | |
|---|---|---|---|---|---|
| 0 | 1970-01-04 | 1970-01-11 | 8 | 1970 | SH071870 |
(注:示例中天数为15是因为原数据中该stormid包含15条记录,若用日期差计算则为8天,可根据实际需求选择对应逻辑)
内容的提问来源于stack exchange,提问作者MateaMar
相关产品推荐
相关产品推荐

