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

如何按stormid分组获取vmax最大值并添加至另一DataFrame

解决方案

原始数据集

seasonstormidvmax
01970SH0719701
11970SH0719716
21970SH0719703
31970SH0719719

你的代码df['vmax'] = df['stormid']['vmax'].max()错误在于:df['stormid']是Series对象,不存在vmax索引,会触发KeyError。下面提供两种可行方法:


方法1:分组计算+合并(推荐,高效)

先通过分组得到每个stormid对应的vmax最大值,再将结果合并到目标DataFrame中,这是Pandas最优的矢量化操作方式:

# 1. 从原始DataFrame计算每个stormid的vmax最大值
storm_vmax_max = df.groupby('stormid')['vmax'].max().reset_index()
# 重命名列,避免和目标DataFrame的列名冲突
storm_vmax_max.rename(columns={'vmax': 'vmax_max'}, inplace=True)

# 2. 合并到目标DataFrame(假设目标DataFrame名为target_df,且包含stormid列)
target_df = target_df.merge(storm_vmax_max, on='stormid', how='left')

执行后storm_vmax_max的结果为:

stormidvmax_max
SH0719703
SH0719719

target_df会新增vmax_max列,自动匹配每个stormid对应的最大值。


方法2:遍历目标DataFrame(满足你的循环需求)

如果必须用循环,建议先构建stormid到最大值的映射字典,再遍历取值(比直接在循环中查询原始DataFrame高效):

# 1. 构建stormid与vmax最大值的映射字典
storm_vmax_map = df.groupby('stormid')['vmax'].max().to_dict()

# 2. 遍历目标DataFrame,新增最大值列
# 方式一:用map矢量化映射(推荐,比显式循环快)
target_df['vmax_max'] = target_df['stormid'].map(storm_vmax_map)

# 方式二:显式循环(不推荐,数据量大时效率低)
for idx, row in target_df.iterrows():
    # 若stormid不存在映射,返回None
    target_df.loc[idx, 'vmax_max'] = storm_vmax_map.get(row['stormid'], None)

注意:显式循环会大幅降低处理效率,仅在特殊场景下使用,优先选择矢量化操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 10:25:20