Python Pandas如何按id聚合DataFrame行并按条件生成布尔列
Pandas 分组按条件生成宽表实现
实现思路
- 先定义每个K值对应的判断规则
- 逐行标记当前记录是否满足对应K的判断条件
- 按id、K字段分组,只要同组内存在任意一条记录满足条件,即判定该id对应该条件的结果为True(如果需要组内所有记录都满足才判定为True,把聚合函数从
any()换成all()即可) - 分组后将K维度的结果转置为列,重命名字段和预期输出对齐
完整代码
import pandas as pd # 1. 构造原始数据集 df = pd.DataFrame({ 'id': [1, 1, 1, 1, 2, 2, 2], 'K': ['k1', 'k2', 'k2', 'k1', 'k1', 'k1', 'k2'], 'V': [3, 4, 5, 5, 2, 3, 3] }) # 2. 配置每个K对应的判断条件,可按需扩展 condition_config = { 'k1': lambda v: v > 1, 'k2': lambda v: v < 4 } # 3. 逐行计算当前记录是否匹配对应K的条件 df['is_match'] = df.apply(lambda row: condition_config[row['K']](row['V']), axis=1) # 4. 分组聚合后转宽表 result = df.groupby(['id', 'K'])['is_match'].any().unstack().reset_index() # 5. 重命名列,匹配预期输出格式 result.columns = ['id', 'k1_condition', 'k2_condition'] print(result)
输出结果
运行代码后得到的输出和预期完全一致:
id k1_condition k2_condition 0 1 True False 1 2 True True
内容的提问来源于stack exchange,提问作者l a s
相关产品推荐
相关产品推荐

