Python处理同一ID多条目:符合条件的ID计数需求
多ID记录的条件统计实现方案
针对你遇到的同一ID对应多条记录的统计需求,用Python的pandas库可以轻松解决,以下是具体步骤和代码:
核心思路
按ID(比如家庭ID)分组,对每个组分别验证两个条件,最后统计符合双条件的ID数量。
步骤与代码
假设你的数据集结构如下(对应你提供的表格):
| FamilyID | Member | LikesApple | LikesOrange |
|---|---|---|---|
| 1 | A | No | Yes |
| 1 | B | No | No |
| 2 | C | Yes | Yes |
| 3 | D | No | No |
| 4 | E | No | Yes |
- 导入pandas库
import pandas as pd
- 读取数据集
如果是CSV文件:
df = pd.read_csv('your_dataset.csv')
如果是Excel文件:
df = pd.read_excel('your_dataset.xlsx')
- 数据预处理(如果需要)
如果你的LikesApple/LikesOrange是字符串(比如'Yes'/'No'),先转换成布尔值方便判断:
df['LikesApple'] = df['LikesApple'] == 'Yes' df['LikesOrange'] = df['LikesOrange'] == 'Yes'
- 分组统计符合条件的ID
# 按FamilyID分组,计算每个组是否满足两个条件 result = df.groupby('FamilyID').agg( all_dislike_apple=('LikesApple', lambda x: ~x.any()), # 所有成员都不喜欢苹果 has_like_orange=('LikesOrange', lambda x: x.any()) # 至少一个成员喜欢橙子 ) # 筛选同时满足两个条件的组,统计数量 count = len(result[(result['all_dislike_apple']) & (result['has_like_orange'])]) print(f"符合条件的家庭数量:{count}")
代码解释
groupby('FamilyID'):把同一家庭的所有成员记录归为一组agg():对每个组执行自定义统计逻辑~x.any():如果组内有任何一个成员喜欢苹果,x.any()返回True,取反后就表示所有成员都不喜欢苹果x.any():只要组内有一个成员喜欢橙子,就返回True,满足第二个条件
- 最后通过布尔索引筛选同时满足两个条件的组,用
len()得到数量
内容的提问来源于stack exchange,提问作者Shafiq S
相关产品推荐
相关产品推荐

