计算DataFrame中同一Value_ID下bread占比≥80%的ID数量
统计DataFrame中bread占比≥80%的Value_ID数量
给定一个包含45个唯一Value_ID的DataFrame,每个Value_ID对应多条取值记录(取值包括bread、slice、jelly、powder等),示例数据集如下:
Value_ID Value 1000 bread 1000 bread 1000 bread 1000 bread 1000 jelly 1000 bread 1001 powder 1001 bread 1001 bread 1001 bread 1001 bread 1002 slice 1002 powder 1002 bread 1002 jelly
需求是统计其中bread占比≥80%的Value_ID数量(示例中符合条件的ID为1001、1002,共2个)。
解决方案
使用pandas分组统计即可快速实现,步骤如下:
代码实现
import pandas as pd # 构建示例数据 data = { 'Value_ID': [1000, 1000, 1000, 1000, 1000, 1000, 1001, 1001, 1001, 1001, 1001, 1002, 1002, 1002, 1002], 'Value': ['bread', 'bread', 'bread', 'bread', 'jelly', 'bread', 'powder', 'bread', 'bread', 'bread', 'bread', 'slice', 'powder', 'bread', 'jelly'] } df = pd.DataFrame(data) # 计算每个Value_ID对应的bread占比 bread_ratio = df.groupby('Value_ID')['Value'].apply(lambda x: (x == 'bread').mean()) # 筛选占比≥80%的ID并统计数量 qualified_count = len(bread_ratio[bread_ratio >= 0.8]) print(f"符合条件的Value_ID数量:{qualified_count}")
关键逻辑说明
- 分组计算占比:通过
groupby('Value_ID')对每个ID分组,用(x == 'bread').mean()直接得到该组中bread的占比(均值等价于符合条件的记录数除以组内总记录数) - 筛选与统计:用布尔索引筛选出占比≥0.8的记录,再用
len()统计符合条件的ID数量
运行上述代码后,会输出符合条件的Value_ID数量:2,与示例预期结果一致。
内容的提问来源于stack exchange,提问作者DSML
相关产品推荐
相关产品推荐

