2024-07-04 16:39:04 发布
网友
你好,我有一个df,比如
list_vales_regex=['ABC',DEF'] Groups Names G1 ABC_9 G1 ZTY_2 G1 SGG56 G1 BBCHU G1 DEFE_8 G2 ABC_6 G2 GGDY G3 ABC_6 G3 DEF98 G3 DEF89 G4 DEF_09 G4 DGE7 G5 DGGE22 G5 DGGE23
我只想保留同时包含(ABC和DEF名称的组
ABC
DEF
在此示例中,仅保留了G1和G3。 有人有主意吗
G1
G3
首先通过列表将值获取到helper Series通过^{}和|作为regex or的连接值,然后比较^{}中每个组转换为set的值:
Series
|
or
set
list_vales_regex=['ABC','DEF'] s = df['Names'].str.extract(f'({"|".join(list_vales_regex)})', expand=False) df = df[s.groupby(df['Groups']).transform(lambda x: set(x) >= set(list_vales_regex))] print (df) Groups Names 0 G1 ABC_9 1 G1 ZTY_2 2 G1 SGG56 3 G1 BBCHU 4 G1 DEFE_8 7 G3 ABC_6 8 G3 DEF98 9 G3 DEF89
或者使用^{}按^{}过滤(如果不是大数据,因为速度较慢):
df = df[s.groupby(df['Groups']).transform('nunique').ge(2)]
另一种方法是通过^{}匹配至少一个值,然后通过L[0]根据列表的第一个值过滤组,并将其传递给^{}进行测试
L[0]
list_vales_regex=['ABC','DEF'] L = [df.set_index('Groups')['Names'].str.contains(x).any(level=0) for x in list_vales_regex] df = df[df['Groups'].isin(L[0].index[np.logical_and.reduce(L)])] print (df) Groups Names 0 G1 ABC_9 1 G1 ZTY_2 2 G1 SGG56 3 G1 BBCHU 4 G1 DEFE_8 7 G3 ABC_6 8 G3 DEF98 9 G3 DEF89
详细信息:
print (np.logical_and.reduce(L)) [ True False True False False] print (L[0].index[np.logical_and.reduce(L)]) Index(['G1', 'G3'], dtype='object', name='Groups')
首先通过列表将值获取到helper} 和} 中每个组转换为
Series
通过^{|
作为regexor
的连接值,然后比较^{set
的值:或者使用^{} 按^{} 过滤(如果不是大数据,因为速度较慢):
另一种方法是通过^{} 匹配至少一个值,然后通过} 进行测试
L[0]
根据列表的第一个值过滤组,并将其传递给^{详细信息:
相关问题 更多 >
编程相关推荐