gpt4 book ai didi

python - 使用至少一个匹配条件过滤组上的 DataFrame

转载 作者:太空宇宙 更新时间:2023-11-04 11:06:50 24 4
gpt4 key购买 nike

我正在使用具有以下结构的 DataFrame:

import pandas as pd

df = pd.DataFrame({'group' : [1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 5],
'id' : ['A_410', 'B_171', 'X_218', 'A_685', 'B_305', 'C_407', 'X_202', 'B_989', 'C_616', 'X_267', 'A_112', 'C_358'],
'active' : [-1, -1, 999, -1, -1, 1, 999, 1, 1, 999, -1, 1]})

print(df)

group id active
0 1 A_410 -1
1 1 B_171 -1
2 1 X_218 999
3 2 A_685 -1
4 2 B_305 -1
5 2 C_407 1
6 2 X_202 999
7 3 B_989 1
8 3 C_616 1
9 3 X_267 999
10 4 A_112 -1
11 5 C_358 1

我的目标很简单:我只想查看其中至少有一个事件 ID 的组(事件 ID 标记为 1)。

生成的 DataFrame 应如下所示:

    group     id  active
1 2 A_685 -1
2 2 B_305 -1
3 2 C_407 1
4 2 X_202 999
5 3 B_989 1
6 3 C_616 1
7 3 X_267 999
8 5 C_358 1

不幸的是,我不知道如何用 Python/Pandas 语法表达它。我使用适当的关键字搜索了以前的帖子,但找不到类似的问题。任何帮助,将不胜感激。

最佳答案

比较值 1 并通过 GroupBy.transform 测试每组至少有一个 True , 最后过滤 boolean indexing :

df = df[df['active'].eq(1).groupby(df['group']).transform('any')]
print (df)
group id active
3 2 A_685 -1
4 2 B_305 -1
5 2 C_407 1
6 2 X_202 999
7 3 B_989 1
8 3 C_616 1
9 3 X_267 999
11 5 C_358 1

另一种解决方案使用1 检查所有组并按Series.isin 过滤原始列group :

df = df[df['group'].isin(df.loc[df['active'].eq(1), 'group'])]

关于python - 使用至少一个匹配条件过滤组上的 DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59237474/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com