如何根据列值是否为给定字符串的子字符串来过滤熊猫行?

问题描述

我有一个带有列df的数据框A。 有给定的字符串s

我想用行的子集来对数据帧进行子集化,行中的列值在A中是 给定字符串s。 如果我想反过来,我会做类似df[df['A'].contains(s)]的事情。 但是我想过滤掉其中sdf['A']中值的超字符串的行。 如果存在重复的问题,我无法提前找到答案,因此我们深表歉意。

解决方法

我创建了一个示例示例:

s = 'sas'
df = pd.DataFrame(data={'A':['s','a','sa','da']})

解决方案是:

filtered_df = df[[s.find(i)!=-1 for i in df['A'].values]]

这不是熊猫方式,但是可以。希望对您有所帮助。

输出:

    A
0   s
1   a
2  sa

UPD :如果您不想在s == i处添加行,则可以修改以下代码,例如:

df[[((s.find(i)!=-1) and (s!=i)) for i in df['A'].values]]
,

我认为您没有比列表理解更好的方法了

df[[x in s for x in df.A]]

但是,如果df.A是重复的(例如类别),则可以对其进行优化

key,unique_vals = pd.factorize(df.A)
mask = np.asarray([x in s for x in unique_vals])
df.loc[mask[key]]

或者如果df.A是绝对的

key,unique_vals = df.A.cat.codes,df.A.cat.categories
mask = np.asarray([x in s for x in unique_vals])
df.loc[mask[key]]