You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于条件为分组设置布尔掩码的Pandas问题求助

问题解决:按PERNR+Name分组标记含特定Age值的组

需求

若Age列中存在值'2035',则将对应PERNR+Name组合分组的所有行在新列中设为True。

测试数据

import pandas as pd

# 初始化列表数据
data = {'PERNR':[111111, 111111, 111111, 111111, 111111, 111111, 111111, 222222, 222222, 222222, 222222, 222222, 222222],
        'Name':['11.11.2024', '11.11.2024', '11.11.2024', '11.11.2024', '14.11.2024', '14.11.2024', '14.11.2024',
                '20.11.2024', '20.11.2024', '20.11.2024', '11.11.2024', '11.11.2024', '11.11.2024'],
        'Age':['', '', '', '', '', '2035', '', '', '', '', '', '', '2035']}
df = pd.DataFrame(data)

原尝试代码及问题

原代码:

df['new'] = df['Age'].eq('2035').groupby(df['Name']).transform('any')

问题:PERNR为111111的Name='11.11.2024'分组被错误标记为True,预期该分组应为False。原因是原代码仅按Name分组,同一Name可能属于不同PERNR,导致跨PERNR的Age值被合并判断。

修正后的代码

# 按PERNR和Name共同分组,判断每组是否存在'2035'
df['new'] = df['Age'].eq('2035').groupby([df['PERNR'], df['Name']]).transform('any')

验证结果

运行修正代码后:

  • PERNR=111111的Name='11.11.2024'分组:所有行new列值为False(符合预期)
  • PERNR=111111的Name='14.11.2024'分组:所有行new列值为True(符合预期)
  • PERNR=222222的Name='20.11.2024'分组:所有行new列值为False(符合预期)
  • PERNR=222222的Name='11.11.2024'分组:所有行new列值为True(符合预期)

内容的提问来源于stack exchange,提问作者mxplk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 00:48:13