python计算一个字符串在pandas datafram的整行中出现的次数

2024-10-05 15:22:38 发布

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

我有一个基于我先前的question的问题。下面的代码运行良好,它告诉我search_string是否出现在整行中。如何修改最后一行,使其提供匹配计数而不是1或0?例如,对于第一行,它应该返回4,因为mysearch_string位于该行的4个位置。在

sales = [{'account': 'Jones LLC jones', 'Jan': '150', 'Feb': '200', 'Mar': '140 jones jones'},
         {'account': 'Alpha Co',  'Jan': 'Jones', 'Feb': '210', 'Mar': '215'},
         {'account': 'Blue Inc',  'Jan': '50',  'Feb': '90',  'Mar': '95' }]
df = pd.DataFrame(sales)
df

search_string = 'Jones'

(df.apply(lambda x: x.str.contains(search_string))
                       .sum(axis=1).astype(int))

Tags: dfsearchstringaccountmarjanfeb计数
2条回答

使用前面的question中的代码,我们简单地将any方法更改为sum方法。将所有的1相加,以有效地计算给定行(轴=1)中出现的次数。在

## added and extra Jones into row 1 for 'Jan' column
sales = [{'account': 'Jones LLC', 'Jan': 'Jones', 'Feb': '200', 'Mar': '140'},
         {'account': 'Alpha Co',  'Jan': 'Jones', 'Feb': '210', 'Mar': '215'},
         {'account': 'Blue Inc',  'Jan': '50',  'Feb': '90',  'Mar': '95' }]

df = pd.DataFrame(sales)

df_list = []

for search_string in ['Jones', 'Co', 'Alpha']:
    #use above method but rename the series instead of setting to
    # a columns. The append to a list.
    df_list.append(df.apply(lambda x: x.str.contains(search_string))
                     .sum(axis=1) ## HERE IS SUM in place of any
                     .astype(int)
                     .rename(search_string))

#concatenate the list of series into a DataFrame with the original df
df = pd.concat([df] + df_list, axis=1)
df

Out[2]:
    Feb Jan    Mar   account     Jones  Co   Alpha
0   200 Jones  140   Jones LLC   2      0    0
1   210 Jones  215   Alpha Co    1      1    1
2   90  50     95    Blue Inc    0      0    0

您可以使用findall.str.len

sales = [{'account': 'Jones LLC jones', 'Jan': '150', 'Feb': '200', 'Mar': '140 jones jones'},
         {'account': 'Alpha Co',  'Jan': 'Jones', 'Feb': '210', 'Mar': '215'},
         {'account': 'Blue Inc',  'Jan': '50',  'Feb': '90',  'Mar': '95' }]
df = pd.DataFrame(sales)
df

search_string = 'jones' #Note changed to lowercase j to find more data.

(df.apply(lambda x: x.str.findall(search_string).str.len())
                       .sum(axis=1).astype(int))

输出:

^{pr2}$

将@Vaishali edit添加到解决方案:

df.apply(lambda x: x.str.lower().str.findall(search_string).str.len()).sum(axis=1).astype(int)

输出:

0    4
1    1
2    0
dtype: int32

相关问题 更多 >