如何在Pandas中对索引列应用字符串拆分并统计截断邮编计数
解决邮编前缀计数统计问题
问题分析
你当前的DataFrame由value_counts生成,索引为完整邮编,count列记录对应出现次数。之前用apply(axis=0)报错,是因为axis=0是对列执行函数,但你要处理的是行索引的字符串,且apply并非最优的矢量化操作方式。
高效解决方案
无需修改原DataFrame索引,也不用重新生成原始邮编列表,直接基于现有value_count_df做矢量化操作即可,两种方式任选:
方式1:直接操作索引分组
利用Pandas字符串矢量化方法处理索引,再按拆分后的前缀分组求和:
# 拆分索引中的邮编,取空格前的第一部分,分组统计总次数 result = value_count_df.groupby(value_count_df.index.str.split(" ").str[0])["count"].sum()
方式2:将索引转为列后处理
如果觉得操作索引不习惯,可先把索引转成普通列,处理后再分组:
# 重置索引,将邮编从索引转为列 temp_df = value_count_df.reset_index() # 生成邮编前缀列(拆分后取第一部分) temp_df["postcode_prefix"] = temp_df["Postcode"].str.split(" ").str[0] # 按前缀分组求和,按需排序索引 result = temp_df.groupby("postcode_prefix")["count"].sum().sort_index()
为何之前的apply会报错?
你使用value_count_df.apply(split_postcode, axis=0)时,axis=0表示对每一列应用函数,但split_postcode是处理字符串的逻辑,而count列是数值类型,执行时会因类型不匹配抛出ValueError。此外,这种逐元素的apply效率远不如上面的矢量化分组操作。
内容的提问来源于stack exchange,提问作者user2138149
相关产品推荐
相关产品推荐

