如何在我的 pandas 列中找到连续的重复数字?

How do I find consecutive repeating numbers in my pandas column?

我有两列,一列包含一串数字,一列包含两位或三位数字,如下所示:

    Account number     
0   5493455646944        
1   56998884221          
2   95853255555926       
3   5055555555495718323  
4   56999998247361       
5   6506569568           

我想创建一个正则表达式函数,如果帐号包含 5 个或更多的连续重复数字,它会显示一个标志。

所以理论上目标状态如下:

    Account number     test
0   5493455646944        No
1   56998884221          No
2   95853255555926       Yes
3   5055555555495718323  Yes
4   56999998247361       Yes
5   6506569568           No

我在想:

def reg_finder(x):
    return re.findall('^([0-9]){5,}$', x)

我不太会用正则表达式,所以不确定...谢谢

编辑:这是我试过的:

def reg_finder(x):
    return re.findall('\b(\d)+\b', x)

example_df['test'] = example_df['Account number'].apply(reg_finder)

    Account number      test
0   5493455646944        []
1   56998884221          []
2   95853255555926       []
3   5055555555495718323  []
4   56999998247361       []
5   6506569568           []


您可以使用

import pandas as pd
import warnings
warnings.filterwarnings("ignore", message="This pattern has match groups")

df = pd.DataFrame({'Account number':["5493455646944","56998884221","95853255555926","5055555555495718323","56999998247361","6506569568"]})
df['test'] = "No"
df.loc[df["Account number"].str.contains(r'([0-9]){4,}'), 'test'] = "Yes"

输出:

>>> df
        Account number test
0        5493455646944   No
1          56998884221   No
2       95853255555926  Yes
3  5055555555495718323  Yes
4       56999998247361  Yes
5           6506569568   No

请注意,r'([0-9]){4,}' 正则表达式是使用原始字符串文字定义的,其中反斜杠被解析为文字反斜杠,而不是字符串转义序列辅助字符。

你的正则表达式有问题re.findall('^([0-9]){5,}$', x):

  1. 你用^$是用来匹配整个字符串是连续的
  2. 你要匹配多5个</code>已经匹配了,你只需要再多4个</li> </ol> <p>您可以使用</p> <pre><code>df['test'] = np.where(df['Account number'].astype(str).str.contains(r'([0-9]){4,}'), 'Yes', 'No') # Or df['test'] = np.where(df['Account number'].astype(str).str.contains(r'(\d){4,}'), 'Yes', 'No')
    print(df)
    
            Account number test
    0        5493455646944   No
    1          56998884221   No
    2       95853255555926  Yes
    3  5055555555495718323  Yes
    4       56999998247361  Yes
    5           6506569568   No