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

基于另一列条件为DataFrame列赋值:获取特征最大值对应城市

问题解决方法

核心问题分析

你当前代码直接取data.columns[1](City列)的max(),得到的是城市名字母序最大值——因为字符串的max()是按字母排序的。要获取对应Feature最大值的城市,得先定位该State下Feature最大的行,再提取对应City值。

修改后的代码实现

优化思路

先针对每个DataFrame的Feature列,构建「State-最优城市」的映射字典,再批量赋值,既解决逻辑错误,又提升效率。

完整代码

dfs = [df_st_pop, df_st_l_ar, df_st_w_ar, df_st_t_ar]

for data in dfs:
    # 获取当前DataFrame的Feature列名
    feature_col = data.columns[2]
    # 生成每个State对应Feature最大值的城市映射
    state_city_map = df.groupby('State').apply(
        lambda group: group.loc[group[feature_col].idxmax(), 'city']
    ).to_dict()
    # 给City列赋值
    data.iloc[:, 1] = data['State'].map(state_city_map)
    # 给Feature列赋值对应State的最大值
    data.iloc[:, 2] = df.groupby('State')[feature_col].max().reindex(data['State']).values
    # 计算Feature排名
    data.iloc[:, 3] = data.iloc[:, 2].rank(ascending=False, na_option='keep')

关键代码解释

  • groupby('State').apply(lambda group: group.loc[group[feature_col].idxmax(), 'city']):按State分组后,用idxmax()找到每组内Feature值最大的行索引,再提取该行的City。
  • data['State'].map(state_city_map):通过映射字典批量匹配城市,比循环遍历更高效,也避免了索引报错。
  • df.groupby('State')[feature_col].max().reindex(data['State']).values:替代原来的列表推导,更简洁地给Feature列赋值对应State的最大值。

示例验证

用你提供的测试数据:

indexStatecityPopulationland area
0AlaskaJuneau32,2552,704.00
1AlaskaSitka8,4582,870.10
2KansasTribune1,182778.2

处理后Alaska对应的City列会正确显示Sitka(对应最大land area),而非字母序最大的Juneau。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 18:03:18