基于条件为分组设置布尔掩码的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
相关产品推荐
相关产品推荐

