gpt4 book ai didi

Python Pandas 按多个条件过滤列

转载 作者:太空宇宙 更新时间:2023-11-04 02:51:10 25 4
gpt4 key购买 nike

我有一个这样的数据框:

 A     B        D
d 151 M
d 152 a
d 153 M
d 161 z
d 164 M
d 169 g
d 178 g
d 173 e
d 176 j
d 605 j
d 603 d
d 607 e
d 905 j
d 903 d
d 907 e

我想根据 B 列的值对其进行过滤。具体来说,我希望 B 列的值以 15、16 和 60 开头。我的数据框将缩减为:

 A     B        D
d 151 M
d 152 a
d 153 M
d 161 z
d 164 M
d 169 g
d 605 j
d 603 d
d 607 e

到目前为止,我未能成功实现此结果。实现这一目标的最佳方式是什么?

最佳答案

您需要先转换为 str 并选择前 2 值与 isin 进行比较并使用 boolean indexing 进行过滤:

print (df.B.astype(str).str[:2])
0 15
1 15
2 15
3 16
4 16
5 16
6 17
7 17
8 17
9 60
10 60
11 60
12 90
13 90
14 90
Name: B, dtype: object

print (df[df.B.astype(str).str[:2].isin(['15','16','60'])])
A B D
0 d 151 M
1 d 152 a
2 d 153 M
3 d 161 z
4 d 164 M
5 d 169 g
9 d 605 j
10 d 603 d
11 d 607 e

另一个解决方案是使用 contains使用自定义正则表达式 - ^ 表示字符串的开头和 | 或:

L = [15,16,90]
val = '|'.join(['^' + str(x) for x in L])
print (val)
^15|^16|^90
print (df[df.B.astype(str).str.contains(val)])
A B D
0 d 151 M
1 d 152 a
2 d 153 M
3 d 161 z
4 d 164 M
5 d 169 g
12 d 905 j
13 d 903 d
14 d 907 e

关于Python Pandas 按多个条件过滤列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43818104/

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