Python 如何检查列中的条目中的模式并计算模式数?

Python 如何检查列中的条目中的模式并计算模式数?,python,string,pandas,dataframe,data-analysis,Python,String,Pandas,Dataframe,Data Analysis,我有一个数据帧: Name Price 0 Dictionary 3 1 Book 4 2 Dict En-Ru 2 3 BookforKids 6 4 Dict FR-CHN 1 我需要一段代码来检查“Name”列中我可以指定的模式,并计算另一个数据帧中创建的模式的数量 例如,使用patterns Dict检查“Name”列中的条目数。忽略案

我有一个数据帧:

         Name         Price
0        Dictionary     3
1        Book           4
2        Dict En-Ru     2
3        BookforKids    6
4        Dict FR-CHN    1
我需要一段代码来检查“Name”列中我可以指定的模式,并计算另一个数据帧中创建的模式的数量

例如,使用patterns Dict检查“Name”列中的条目数。忽略案例的书应给出以下结果:

|  Pattern    | Occurencies |
| ----------- | ----------- |
| Dict        | 3           |
| Book        | 2           |

您可以将模式定义为自定义函数:

# example
def get_pattern(txt):
   if 'Dict' in txt:
       return 'Dict'
   if 'Book' in txt:
       return 'Book'

   return np.nan
然后在数据帧中应用并使用值计数:

df['Pattern'] = df['Name'].apply(get_pattern)
df['Pattern'].value_counts()

Dict    3
Book    2
dtype: int64

您可以将模式定义为自定义函数:

# example
def get_pattern(txt):
   if 'Dict' in txt:
       return 'Dict'
   if 'Book' in txt:
       return 'Book'

   return np.nan
然后在数据帧中应用并使用值计数:

df['Pattern'] = df['Name'].apply(get_pattern)
df['Pattern'].value_counts()

Dict    3
Book    2
dtype: int64
这里有一种方法:

您可以使用
flags
参数使其不区分大小写:

patterns_lower = '|'.join([s.lower() for s in patterns])
(df.Name.str.lower().str.extract(rf"({patterns_lower})", expand=False)
        .value_counts())
这里有一种方法:

您可以使用
flags
参数使其不区分大小写:

patterns_lower = '|'.join([s.lower() for s in patterns])
(df.Name.str.lower().str.extract(rf"({patterns_lower})", expand=False)
        .value_counts())

谢谢你的编辑@jez!扩展在我的脑海中没有:)它可以工作,但它是区分大小写的,它不应该对“book”和“book”有任何区别,如何改变它?它给了我两行,一行是“book”,另一行是“book”,它应该只给出一行,包含所有大小写的总和,“book”或“book”或“book”,我的意思是忽略这个词是如何写的谢谢编辑@jez!扩展在我的脑海中没有:)它可以工作,但它是区分大小写的,它不应该对“book”和“book”有任何区别,如何改变它?它给了我两行,一行是“book”,另一行是“book”,它应该只给一行所有大小写的总和,“book”或“book”或“book”,我的意思是忽略这个词的书写方式