python - 按子字符串条件对数据帧进行排序,不包括相似的字符串
问题描述
我有一个名为'tag'的字符串类型列的数据框,
标签有三个类别(data_types):
df['tag']
data_types=['DATA','DATAKIND','DATAKINDSIM']
如果我想计算 'tag' 列中每个 data_type 的行数,我以这种方式应用字符串包含条件
for data in data_types:
df[dtype.tag.str.contains(data_type,na=False)].count()
但是,显然,标记“DATA”的计数包括真正的“DATA”行以及会计中的“DATAKIND”和“DATAKINDSIM”;'DATAKIND' 和 'DATAKINDSIM' 相同。如何排除“DATA”会计列中的类似字符串?
这是一个可重现的例子:
d = {'tag': ['DATA', 'DATAKIND','DATA','DATA','DATAKINDSIM','DATAKIND']}
df = pd.DataFrame(data=d)
data_types=['DATA','DATAKIND','DATAKINDSIM']
for data_type in data_types:
print(data_type)
counting=df[df.tag.str.contains(data_type,na=False)].count()
print(counting)
和输出:
DATA
tag 6
dtype: int64
DATAKIND
tag 3
dtype: int64
DATAKINDSIM
tag 1
dtype: int64
这将是预期的输出,考虑到执行的会计排除了类似的字符串,只计算了具体的字符串匹配,
预期输出,
DATA
tag 3
dtype: int64
DATAKIND
tag 2
dtype: int64
DATAKINDSIM
tag 1
dtype: int64
解决方案
如果我理解正确,您可以使用isin
先过滤tag
列然后使用groupby.size
data_types=['DATA','DATAKIND','DATAKINDSIM']
df[df['tag'].isin(data_types)].groupby('tag')['tag'].size()
tag
DATA 3
DATAKIND 2
DATAKINDSIM 1
Name: tag, dtype: int64
推荐阅读
- networking - 签名社交网络示例
- r - 如何从 R 中的散点图中获取样本信息(或门控)?
- java - 尝试使用 Liquidbase 运行触发器时出现错误
- vb.net - Outlook 项目 Unicode
- javascript - 反应本机获取数据
- css - 在浏览器的 100% 和 80% 缩放级别上,将弹出窗口保持在同一位置
- types - INCLUDE 中的声明在主程序中不被识别
- python - Python -V 在 Windows 10 上不起作用或返回任何错误
- angular - 忽略未捕获的错误错误:服务器提前终止,状态为 3221225477
- c# - 在 Xamarin 的 xmlns 中找不到类型 Ellipse