gpt4 book ai didi

python - 根据组过滤 DataFrame 行

转载 作者:太空狗 更新时间:2023-10-30 02:35:47 25 4
gpt4 key购买 nike

我正在使用具有以下结构的 DataFrame 学习 Python/Pandas:

import pandas as pd

df = pd.DataFrame({"cus_id" : ["2370", "2370", "5100", "5100", "8450", "8450", "1630", "1630", "1630"],
"cus_group" : ["A", "A", "A", "B", "B", "B", "A", "A", "B"]})

print(df)

cus_id cus_group
0 2370 A
1 2370 A
2 5100 A
3 5100 B
4 8450 B
5 8450 B
6 1630 A
7 1630 A
8 1630 B

我的目标是过滤上述 DataFrame 的行。具体来说,我只想保留客户属于不同组的行。这是我的尝试:

print(df.drop_duplicates(subset = ["cus_id", "cus_group"], keep = False))

cus_id cus_group
2 5100 A
3 5100 B
8 1630 B

不幸的是,这不是我正在寻找的确切输出。注意 cus_id = 1630在原始 DataFrame 中出现三次:在组 A 中出现两次和一次组B .由于它属于两个不同的组(AB),我不想删除该客户的任何行。也就是说,我正在寻找的输出如下:

  cus_id cus_group
2 5100 A
3 5100 B
6 1630 A
7 1630 A
8 1630 B

我不确定我缺少什么功能来实现我的目标。任何额外的帮助将不胜感激。

最佳答案

使用DataFrameGroupBy.nuniqueGroupBy.transform对于与原始 DataFrame 具有相同大小的 Series,因此可以通过 boolean indexing 进行过滤对于不等于 1 的行:

df = df[df.groupby('cus_id')['cus_group'].transform('nunique').ne(1)]
print (df)
cus_id cus_group
2 5100 A
3 5100 B
6 1630 A
7 1630 A
8 1630 B

详细信息:

print (df.groupby('cus_id')['cus_group'].transform('nunique'))
0 1
1 1
2 2
3 2
4 1
5 1
6 2
7 2
8 2
Name: cus_group, dtype: int64

关于python - 根据组过滤 DataFrame 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58023598/

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