为具有条件的组设置布尔掩码

问题描述 投票:0回答:1

如果值“2235”位于“年龄”列中,则应在新列中将“名称”列中的关联组设置为全部 true。

我的测试数据框是:

import pandas as pd

# intialise data of lists.
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')

Out[400]: 
     PERNR        Name   Age    new
0   111111  11.11.2024         True
1   111111  11.11.2024         True
2   111111  11.11.2024         True
3   111111  11.11.2024         True
4   111111  14.11.2024         True
5   111111  14.11.2024  2035   True
6   111111  14.11.2024         True
7   222222  20.11.2024        False
8   222222  20.11.2024        False
9   222222  20.11.2024        False
10  222222  11.11.2024         True
11  222222  11.11.2024         True
12  222222  11.11.2024  2035   True


But it should be:

Out[400]: 
     PERNR        Name   Age    new
0   111111  11.11.2024        False
1   111111  11.11.2024        False
2   111111  11.11.2024        False
3   111111  11.11.2024        False
4   111111  14.11.2024         True
5   111111  14.11.2024  2035   True
6   111111  14.11.2024         True
7   222222  20.11.2024        False
8   222222  20.11.2024        False
9   222222  20.11.2024        False
10  222222  11.11.2024         True
11  222222  11.11.2024         True
12  222222  11.11.2024  2035   True

经过多次尝试,我没有找到解决方案。

感谢您的帮助

python dataframe group-by transform mask
1个回答
0
投票

您应该按 PERNR 和名称列进行分组:

df['new'] = df['Age'].eq('2035').groupby([df["PERNR"], df["Name"]]).transform('any')
© www.soinside.com 2019 - 2024. All rights reserved.