新网站制作平台百度首页
同频率放大法求设计洪水过程线需要首先统计典型洪水过程线的洪水参数,如洪峰流量及峰现时间、最大1d、3d、5d、7d洪量及起讫时间。如果典型洪水过程线的时间步长不均匀,那么最大n日洪量就是一个难题,需要首先重采样为等时间间隔的洪水过程线。以下给出针对于一场不均匀时间间隔的典型洪水过程线计算最大n日洪量及起讫时间的python程序,该程序由AI提示词训练得出。
输入文件格式为:
import pandas as pd# 读取Excel文件
file_path = '典型洪水数据.xlsx'
df = pd.read_excel(file_path)# 将历时转换为小时,并将流量列转换为数值类型
df['历时(h)'] = df['历时(h)'].astype(float)
df['流量(m3/s)'] = df['流量(m3/s)'].astype(float)# 创建时间序列索引
df['时间'] = pd.to_timedelta(df['历时(h)'], unit='h')
df.set_index('时间', inplace=True)# 重采样为每小时数据(如果原始数据不是每小时记录一次)
df_resampled = df.resample('H').mean().interpolate(method='linear')# 计算每小时的洪量(单位:亿立方米)
df_resampled['洪量(亿m3)'] = df_resampled['流量(m3/s)'] * 3600 / 1e8 # 3600秒转换为小时,除以1e8转换为亿立方米# 计算最大一日洪量(24小时)
window_1_day = 24
rolling_sum_1_day = df_resampled['洪量(亿m3)'].rolling(f'{window_1_day}H').sum()
max_1_day_flood = rolling_sum_1_day.max()
max_1_day_index = rolling_sum_1_day.idxmax()
start_time_1_day = max_1_day_index - pd.Timedelta(hours=window_1_day - 1)
end_time_1_day = max_1_day_index# 计算最大三日洪量(72小时)
window_3_days = 72
rolling_sum_3_days = df_resampled['洪量(亿m3)'].rolling(f'{window_3_days}H').sum()
max_3_days_flood = rolling_sum_3_days.max()
max_3_days_index = rolling_sum_3_days.idxmax()
start_time_3_days = max_3_days_index - pd.Timedelta(hours=window_3_days - 1)
end_time_3_days = max_3_days_index# 计算最大五日洪量(120小时)
window_5_days = 120
rolling_sum_5_days = df_resampled['洪量(亿m3)'].rolling(f'{window_5_days}H').sum()
max_5_days_flood = rolling_sum_5_days.max()
max_5_days_index = rolling_sum_5_days.idxmax()
start_time_5_days = max_5_days_index - pd.Timedelta(hours=window_5_days - 1)
end_time_5_days = max_5_days_index# 计算最大七日洪量(168小时)
window_7_days = 168
rolling_sum_7_days = df_resampled['洪量(亿m3)'].rolling(f'{window_7_days}H').sum()
max_7_days_flood = rolling_sum_7_days.max()
max_7_days_index = rolling_sum_7_days.idxmax()
start_time_7_days = max_7_days_index - pd.Timedelta(hours=window_7_days - 1)
end_time_7_days = max_7_days_index# 创建结果DataFrame
results = {'指标': ['最大一日洪量', '一日洪量开始历时', '一日洪量结束历时','最大三日洪量', '三日洪量开始历时', '三日洪量结束历时','最大五日洪量', '五日洪量开始历时', '五日洪量结束历时','最大七日洪量', '七日洪量开始历时', '七日洪量结束历时'],'值': [f"{max_1_day_flood:.2f} 亿立方米", start_time_1_day.total_seconds() / 3600, end_time_1_day.total_seconds() / 3600,f"{max_3_days_flood:.2f} 亿立方米", start_time_3_days.total_seconds() / 3600, end_time_3_days.total_seconds() / 3600,f"{max_5_days_flood:.2f} 亿立方米", start_time_5_days.total_seconds() / 3600, end_time_5_days.total_seconds() / 3600,f"{max_7_days_flood:.2f} 亿立方米", start_time_7_days.total_seconds() / 3600, end_time_7_days.total_seconds() / 3600]
}
df_results = pd.DataFrame(results)# 将结果和重采样后的数据输出到新的Excel文件
with pd.ExcelWriter('洪水计算结果.xlsx') as writer:df_results.to_excel(writer, sheet_name='计算结果', index=False)df_resampled.to_excel(writer, sheet_name='重采样数据')print("计算完成,结果已输出到'洪水计算结果.xlsx'文件中。")
输出文件如下: