在数据帧内部进行过滤

2024-05-03 14:15:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我想提取两个前符号,以防前三个符号匹配某个模式(前两个符号应该是括号内的任何符号[ptkbdgG_fvsSxzZhmnNJlrwj],第三个符号应该是括号内的任何符号[IEAOYye|aouKLM@)3*<;(#0~q^LMOEK]

前两行工作正常。 最后几行不起作用,我不明白为什么。代码没有给出任何错误,只是对这些错误没有任何作用

# extract tree first symbols and save them in the new column
df['first_three_symbols'] = df['ITEM'].str[0:3]
#create a boolean column on condition whether first three symbols contain symbols
df["ccv"] = df["first_three_symbols"].str.contains('[ptkbdgG_fvsSxzZhmnNJlrwj][ptkbdgG_fvsSxzZhmnNJlrwj][IEAOYye|aouKLM@)3*<!(#0~q^LMOEK]')

#create another column for True values in the previous column
if df["ccv"].item == True:
    df['first_two_symbols'] = df["ITEM"].str[0:2]

以下是我的输出:

          ID            ITEM  FREQ first_three_symbols    ccv
0          0               a   563                   a  False
1          1       OlrMndmEn     1                 Olr  False
2          2  OlrMndSpOrtl@r     0                 Olr  False
3          3            AG@l    74                 AG@  False
4          4         AG@lbMm    24                 AG@  False
...      ...             ...   ...                 ...    ...
51723  51723         zytzWt@     8                 zyt  False
51724  51724       zytzytOst     0                 zyt  False
51725  51725          zYxtIx     5                 zYx  False
51726  51726       zYxtIxkWt     0                 zYx  False
51727  51727            zyZe     4                 zyZ  False

[51728 rows x 5 columns]

1条回答
网友
1楼 · 发布于 2024-05-03 14:15:12

您可以创建函数,也可以使用apply方法:

def f(row):
  if row["ccv"] == True:
     return row["ITEM"].str[0:2]
  else:
     return None

df['first_two_symbols'] = df.apply(f,axis=1)

或者您可以使用numpy包中的np.where函数

相关问题 更多 >