如何使用 Pandas 计算子字符串(前三个索引)的出现次数?

How to count the occurences of a substring (first three indexes) using Pandas?

我正在尝试计算我的 csv 文件中有多少个 phone 数字以三个不同的列中的数字“123”、“456”和“789”开头。

我最初是用 RegEx 来解决这个问题的:

num_list = ['123', '456', '789']

rgx = '({})'.format('|'.join(num_list))

df['Series1'].str.lower().str.extractall(rgx).iloc[:, 0].value_counts()
df['Series2'].str.lower().str.extractall(rgx).iloc[:, 0].value_counts()
df['Series3'].str.lower().str.extractall(rgx).iloc[:, 0].value_counts()

但是,这种方法的问题是,我觉得它会查找这些数字,而不管它在字符串中的位置如何。我只对计算以这些子字符串中的任何一个开头的那些感兴趣。

您可以使用str.startswith( tuple(num_list) )

import pandas as pd

data = {
    'A': [
        '123-000-000',
        '456-000-000',
        '789-000-000',
        '000-123-000',
        '000-456-000',
        '000-789-000',  
        '000-000-123',
        '000-000-456',
        '000-000-789',        
    ], 
}

df = pd.DataFrame(data)

#print(df)

num_list = ['123', '456', '789']

selected = df[ df['A'].str.startswith( tuple(num_list) ) ]
print(selected)

counts = df['A'].str.startswith( tuple(num_list) ).value_counts()
print('count True :', counts[True])
print('count False:', counts[False])

结果

             A
0  123-000-000
1  456-000-000
2  789-000-000

count True : 3
count False: 6

如果你想使用正则表达式,那么你应该添加 ^

^(123|456|789)

rgx = '^({})'.format('|'.join(num_list))

(^123|^456|^789)

rgx = '(^{})'.format('|^'.join(num_list