0

0

计算 Pandas 分组后某分类值(如“truck”)在组内的百分比占比

碧海醫心

碧海醫心

发布时间:2026-03-16 19:04:01

|

642人浏览过

|

来源于php中文网

原创

计算 Pandas 分组后某分类值(如“truck”)在组内的百分比占比

本文详解如何在 Pandas 中对多列(如 Date_M 和 Corporate)分组后,高效计算指定类别(如 Vehicle type == 'truck')在每组中的占比,并将其作为新列添加到聚合结果中。

本文详解如何在 pandas 中对多列(如 `date_m` 和 `corporate`)分组后,高效计算指定类别(如 `vehicle type == 'truck'`)在每组中的占比,并将其作为新列添加到聚合结果中。

在数据分析中,常需在多级分组(如按月份和企业属性组合)后,进一步统计某分类变量(如车辆类型)的构成比例。例如,针对筛选出“未投保”(Insurance == 0)的记录,按 Date_M(年月)和 Corporate(是否企业客户)分组后,不仅需计算车辆总数、利润率等聚合指标,还需新增一列——每组中“truck”车型所占百分比

关键在于:不能直接对整个 DataFrame 调用 .mean() 或 .sum(),而需在分组上下文中逐组计算布尔条件的满足比例。推荐使用 groupby().apply() 配合匿名函数,既语义清晰,又避免索引对齐错误。

以下为完整、可复现的操作流程(基于您提供的数据结构):

import pandas as pd
import numpy as np

# 构建示例数据
data = {
    "Date": ["2019-08-26 04:14:00", "2020-08-27 01:21:03", "2019-08-26 18:49:04",
             "2020-08-31 16:57:02", "2020-08-23 14:48:02"],
    "Cost": [23719, 17159, 3629, 50738, 48173],
    "Corporate": [0, 0, 0, 1, 0],
    "Vehicle type": ["automobile", "truck", "truck", "automobile", "truck"],
    "Price": [25903, 24748, 11777, 51296, 56314],
    "Insurance": [1, 1, 0, 0, 0],
    "Date_M": ["2019-08", "2020-08", "2019-08", "2020-08", "2020-08"],
}
df = pd.DataFrame(data)

# 步骤1:筛选子集(仅未投保记录)
df_no_insurance = df[df['Insurance'] == 0]

# 步骤2:按两列分组
df_group = df_no_insurance.groupby(['Date_M', 'Corporate'])

# 步骤3:构建聚合结果 DataFrame
results = pd.DataFrame()
results['Number of cars'] = df_group['Date'].count()  # 每组车辆数
results['Доходность'] = np.round(
    (df_group['Price'].sum() - df_group['Cost'].sum()) / df_group['Price'].sum() * 100, 2
)  # 利润率(注意:此处原逻辑有歧义;实际应为每组分别计算 Price.sum() 和 Cost.sum())

# ✅ 步骤4:新增“truck 占比”列 —— 核心解法
results['Percentage of Trucks'] = df_group.apply(
    lambda x: (x['Vehicle type'] == 'truck').sum() / len(x) * 100
).round(2)

? 说明:df_group.apply(...) 中,x 是每个分组的子 DataFrame。(x['Vehicle type'] == 'truck') 返回布尔 Series,.sum() 自动将 True 视为 1、False 视为 0,再除以 len(x)(即该组总行数),即得 truck 占比。乘以 100 并四舍五入后即为百分比数值。

知我AI
知我AI

一款多端AI知识助理,通过一键生成播客/视频/文档/网页文章摘要、思维导图,提高个人知识获取效率;自动存储知识,通过与知识库聊天,提高知识利用效率。

下载

运行后,results 将包含三列:

  • Number of cars:每组车辆总数;
  • Доходность:该组整体利润率(注意:若需单辆车利润率均值,应改用 df_group.apply(lambda x: ((x['Price'] - x['Cost']) / x['Price']).mean() * 100));
  • Percentage of Trucks:该组中 truck 类型车辆的百分比(如 2019-08 + Corporate=0 组含 1 条记录且为 truck,结果为 100.0)。

⚠️ 注意事项

  • 若分组后某组为空(如无 truck 记录),该方法仍安全返回 0.0(因布尔 sum 为 0,除以非零长度);
  • 避免使用 df_group['Vehicle type'].apply(lambda x: (x == 'truck').mean() * 100) —— 虽等效但可读性略低;
  • 如需支持多类别(如同时计算 truck/automobile/van 占比),建议改用 pd.crosstab() 或 value_counts(normalize=True) 配合 unstack()。

此方法简洁、健壮、符合 Pandas 函数式编程范式,适用于任意二元/多类分类占比统计场景。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

82

2025.12.04

Python 数据清洗与预处理实战
Python 数据清洗与预处理实战

本专题系统讲解 Python 在数据清洗与预处理中的核心技术,包括使用 Pandas 进行缺失值处理、异常值检测、数据格式化、特征工程与数据转换,结合 NumPy 高效处理大规模数据。通过实战案例,帮助学习者掌握 如何处理混乱、不完整数据,为后续数据分析与机器学习模型训练打下坚实基础。

34

2026.01.31

lambda表达式
lambda表达式

Lambda表达式是一种匿名函数的简洁表示方式,它可以在需要函数作为参数的地方使用,并提供了一种更简洁、更灵活的编码方式,其语法为“lambda 参数列表: 表达式”,参数列表是函数的参数,可以包含一个或多个参数,用逗号分隔,表达式是函数的执行体,用于定义函数的具体操作。本专题为大家提供lambda表达式相关的文章、下载、课程内容,供大家免费下载体验。

215

2023.09.15

python lambda函数
python lambda函数

本专题整合了python lambda函数用法详解,阅读专题下面的文章了解更多详细内容。

193

2025.11.08

Python lambda详解
Python lambda详解

本专题整合了Python lambda函数相关教程,阅读下面的文章了解更多详细内容。

62

2026.01.05

treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

550

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

30

2025.12.22

深入理解算法:高效算法与数据结构专题
深入理解算法:高效算法与数据结构专题

本专题专注于算法与数据结构的核心概念,适合想深入理解并提升编程能力的开发者。专题内容包括常见数据结构的实现与应用,如数组、链表、栈、队列、哈希表、树、图等;以及高效的排序算法、搜索算法、动态规划等经典算法。通过详细的讲解与复杂度分析,帮助开发者不仅能熟练运用这些基础知识,还能在实际编程中优化性能,提高代码的执行效率。本专题适合准备面试的开发者,也适合希望提高算法思维的编程爱好者。

45

2026.01.06

chatgpt使用指南
chatgpt使用指南

本专题整合了chatgpt使用教程、新手使用说明等等相关内容,阅读专题下面的文章了解更多详细内容。

0

2026.03.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号