我有一个DataFrame:
Name Price
0 Dictionary 3
1 Book 4
2 Dict En-Ru 2
3 BookforKids 6
4 Dict FR-CHN 1
我需要一段代码来检查列"Name"中我可以自己指定的模式,并计算另一个DataFrame中已建立的模式的数量。
例如,用模式检查"名称"列中的条目数量。Dict an Book忽略大小写应该会给出以下结果:
| Pattern | Occurencies |
| ----------- | ----------- |
| Dict | 3 |
| Book | 2 |
以下是使用str.extract
:的一种方法
patterns = ['Dict','Book']
df.Name.str.extract(rf"({'|'.join(patterns)})", expand=False).value_counts()
Dict 3
Book 2
Name: 0, 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())
您可以将模式定义为自定义函数:
# 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