Skip to main content
 首页 » 编程设计

python之pandas 使用正则表达式匹配根据另一列的值为一列设置 bool 值

2024年10月01日26bjzhanghao

我有一个 df,其中一列 ( acount_no ) 包含空字符串、空格字符串和重复数字字符串作为其值。对于这些值,我想创建一个新列 ( valid_account_no ) 并将 False 设置为其对应的行。此外,如果任何 account_no 的长度为 <= 4,它们将被设置 False 为 valid_account_no 。 df 看起来像,

 id    account_no    valid_account_no 
 1                   False 
 2     999999        False 
 3     1234          False 
 4     123456        True 

这是我的代码,

# sets boolean values of column valid account no when account no is spaced or repeated number 
df['valid_account_no'] = df['account_no'].str.match(r"\b(\d)\1+\b| +") 
 
# if length of any account nos are <= 4 or the account nos are empty 
# set values of column valid account no to False 
invalid_account_indices = df[(df['account_no'].str.len() <= 4) | 
                             (df['account_no'] == '')].index 
df.loc[invalid_account_indices, 'valid_account_no'] = False 

我想知道是否有更好的方法来实现这一点,在某种意义上使其更简洁高效。

请您参考如下方法:

如果您的方法本身不错,另一种解决方法是使用简单的 bool 代数,即

m1 = df['account_no'].str.match(r"\b(\d)\1+\b| +") 
m2 = df['account_no'].str.len()<=4 
m3 = df['account_no'] == '' 
df['valid_account_no'] = (m1) | (m2 & m3)