Pandas Groupby无需聚合获取单条返回值的操作方法
仅调用groupby方法只会生成分组实例,需要对实例执行取值操作才能拿到具体数值。针对每个分组仅存唯一值的场景,可选择以下实现方式:
- 方案1:直接生成城市与占比的映射字典(无需二次groupby,效率更高)
因为每个州下的城市对应唯一占比,直接将CITY设为索引提取PERC_MEN列转字典即可,示例代码:for state, state_df in df.groupby(by=['STATE']): city_perc_map = state_df.set_index('CITY')['PERC_MEN'].to_dict() # 直接通过城市名取值,例如city_perc_map['ABBEVILLE']即可拿到对应占比 print(city_perc_map) - 方案2:遍历二次groupby的结果取值
如果必须保留二次groupby的逻辑,直接遍历分组对象的返回值即可:for state, state_df in df.groupby(by=['STATE']): for city, perc_group in state_df.groupby(by=['CITY'])['PERC_MEN']: # 每个分组只有一个值,取第一个元素即可 perc_value = perc_group.iloc[0] print(f"{city}: {perc_value}") - 方案3:使用极简聚合函数(无性能损耗,代码最简洁)
虽然用到聚合函数,但因为每个分组只有一个值,first/last/min等聚合操作的结果和原始值完全一致,写法更简洁:for state, state_df in df.groupby(by=['STATE']): city_perc_series = state_df.groupby(by=['CITY'])['PERC_MEN'].first() # 此时得到索引为CITY的Series,直接用城市名作为索引即可取值 print(city_perc_series)
内容的提问来源于stack exchange,提问作者Bijan
相关产品推荐
相关产品推荐

