Python 在同一列中筛选多个字符串条件下的行

Python 在同一列中筛选多个字符串条件下的行,python,pandas,dataframe,Python,Pandas,Dataframe,我想在多个条件下过滤数据帧。假设我有一个名为“detail”的列,我想得到一个数据帧,其中“detail”列值与以下值匹配: detail = unidecode.unidecode(str(row['detail']).lower()) 现在我将所有detail行都解码为小写,然后我想提取以一些子字符串开头的行,如: detail.startswith('bomb')) 最后还要取另一个整数列等于100的行 我尝试过这样做,但显然不起作用: llista_dfs['df_bombes']

我想在多个条件下过滤数据帧。假设我有一个名为“detail”的列,我想得到一个数据帧,其中“detail”列值与以下值匹配:

detail = unidecode.unidecode(str(row['detail']).lower())
现在我将所有
detail
行都解码为小写,然后我想提取以一些子字符串开头的行,如:

detail.startswith('bomb'))
最后还要取另一个整数列等于100的行

我尝试过这样做,但显然不起作用:

llista_dfs['df_bombes'] = df_filtratge[df_filtratge['detail'].str.lower().startswith('bomb') or df_filtratge['family']==100]
上面这一行是我想要执行的,但我不确定哪种语法能够在一行代码中实现这一点(如果可能的话)

这是代码应该做的一个示例:

初始表格:

    detail            family
0   bòmba             90
1   boMbá             87
2   someword          100
3   someotherword     65
4   Bombá             90
    detail             family
0   bòmba              90
1   boMbá              87
2   someword           100
4   Bombá              90
结果表:

    detail            family
0   bòmba             90
1   boMbá             87
2   someword          100
3   someotherword     65
4   Bombá             90
    detail             family
0   bòmba              90
1   boMbá              87
2   someword           100
4   Bombá              90

实际上@user3483203的评论是正确的解决方案,因为您使用
&
|
而不是
。在任何情况下,如果您想摆脱
unidecode
,您可以使用以下解决方案:

将熊猫作为pd导入
txt=“”0 bòmba 90
1.87
2个字100
换个词65
4.90英寸
df=[列表(过滤器(λx:x!='',t.split(''))[1:]
对于txt.split中的t(“\n”)]
df=pd.DataFrame(df,列=[“详细信息”,“系列])
df[“family”]=df[“family”].astype(int)
cond1=df[“细节”].str.normalize('NFKD')\
.str.encode('ascii',errors='ignore')\
.str.decode('utf-8')\
.str.lower()\
.str.startswith('bomba')
cond2=df[“系列”]==100
df[cond1 | cond2]

使用按位或:
|
根据您的条件,您的代码看起来很好。您可以避免使用
unidecode
谢谢您的回复,我可以问一下为什么在每次str调用结束时都使用反斜杠(\)吗?只是说在下一行中仍然有应用的方法。当有一个新点时,您可能会使用。我用它来满足每行79个字符的惯例。另外,依我看,它更容易阅读/理解。