问题描述
我想用行的子集来对数据帧进行子集化,行中的列值在A
中是
给定字符串s
。
如果我想反过来,我会做类似df[df['A'].contains(s)]
的事情。
但是我想过滤掉其中s
是df['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]]