如何自动化按DataFrame的Brand列各品牌值逐行过滤并完成统计计算
实现方案
你完全不需要手动为每个品牌编写过滤规则,用pandas内置的groupby方法就可以实现自动按Brand列唯一值批量分组统计,比你自己写循环生成掩码的逻辑更简洁、执行效率也更高。
前置数据预处理
你示例中的value列是带千分位分隔符的字符串格式,先转成数值类型方便后续统计计算:
import pandas as pd # 假设你已经将原始数据读入为df对象 df['value'] = df['value'].str.replace('.', '').astype(int)
方案1:groupby批量统计(推荐)
groupby会自动遍历Brand列所有唯一值,将相同品牌的行归为一组,你只要自定义统计逻辑即可,会自动覆盖所有品牌:
示例:计算每个品牌的平均评分、总价值、评分≥60的占比(百分比)
def calc_stats(group): total_count = len(group) high_rating_pct = (group['rating'] >= 60).sum() / total_count * 100 return pd.Series({ '平均评分': group['rating'].mean(), '总价值': group['value'].sum(), '高分占比(%)': round(high_rating_pct, 2) }) # 按Brand列分组执行统计 stat_result = df.groupby('Brand', as_index=False).apply(calc_stats).reset_index(drop=True)
如果你实际要统计的是主品牌维度(比如示例中的雷诺Renault、雪佛兰Chevrolet,不是完整的品牌+车型组合),先提取主品牌再分组即可:
# 提取主品牌:取Brand列的第一个单词 df['主品牌'] = df['Brand'].str.split().str[0] # 按主品牌分组统计 stat_result = df.groupby('主品牌', as_index=False).apply(calc_stats).reset_index(drop=True)
方案2:循环过滤实现(仅适合特殊复杂统计场景)
如果你的统计逻辑非常特殊,必须单独处理每个品牌的过滤结果,可以遍历你已经提取的唯一品牌列表,逐个生成过滤掩码:
# 提取Brand列所有唯一值 unique_brands = df['Brand'].unique() result_list = [] for brand in unique_brands: # 生成当前品牌的过滤掩码 filter_mask = df['Brand'] == brand # 过滤得到当前品牌的所有数据行 brand_data = df[filter_mask] # 此处替换为你自己的统计逻辑 result_list.append({ '品牌': brand, '平均评分': brand_data['rating'].mean(), '车型数量': len(brand_data) }) # 转换为DataFrame格式 stat_result = pd.DataFrame(result_list)
两种方案都可以自动覆盖Brand列所有存在的品牌,你只需要修改统计逻辑部分为你需要的百分比、求和等计算规则即可。
内容的提问来源于stack exchange,提问作者juan camilo
相关产品推荐
相关产品推荐

