pandas - 从 Flask SQLAlchemy 表中获取所有唯一值及其出现次数
问题描述
我有一个烧瓶应用程序,用户可以在其中使用关键字标记他们的帖子。这些标签由空格分隔,并存储在tags
列中的以下模型中。
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(100), unique=False, nullable=False)
date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
content = db.Column(db.Text, unique=True, nullable=False)
urls = db.Column(db.String(1000), unique=False, nullable=True)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
tags = db.Column(db.String(400), unique=False, nullable=True)
upvotes = db.Column(db.Integer, unique=False, nullable=False, default=0)
def __repr__(self):
return f"Post ('{self.title}', '{self.date_posted}')"
我想获得一个可以发布到 html 页面的表格,其中列出了所有唯一标签及其出现的次数(按出现次数排序,降序排列)。
尝试 因此,为了做到这一点,我认为我需要 1)。获取所有标签;2)。循环遍历它们以按空格分割 (tag.split(' ')); 3)。将它们附加回数据框;4)。循环计算出现次数。
这似乎不是一种非常有效的方法。但是我仍然尝试过,这就是我所拥有的。
获取所有标签
all_tags = Post.query.with_entities(Post.tags)
获取所有唯一标签
unique_tags = Post.query.with_entities(Post.tags).distinct()
获取标签计数(不起作用)
counts = pd.Series(Post.query.with_entities(Post.tags)).value_counts()
但这会计算整个标签字符串,而不是由“”分隔的单个标签。我觉得这应该很简单,但我不能完全解决。我怎样才能做到这一点?
这是一些可以使用的虚拟数据:
df = pd.DataFrame({'Index': {0: 0, 1: 1, 2: 2, 3: 3},
'tags': {0: 'tag1 tag2',
1: 'tag3 tag4',
2: 'tag5 tag6 tag7',
3: 'tag2 tag3 tag4 tag1'}})
期望的结果类似于...
{'tag1': {0: 'tag2', 1: 'tag3', 2: 'tag4', 3: 'tag5', 4: 'tag6', 5: 'tag7'},
'2': {0: 2, 1: 2, 2: 2, 3: 1, 4: 1, 5: 1}}
解决方案
这是你想要的吗:
pd.Series(df.tags.str.split(' ').sum()).value_counts()
Out[659]:
tag1 2
tag4 2
tag3 2
tag2 2
tag6 1
tag7 1
tag5 1
dtype: int64
推荐阅读
- amazon-web-services - 用于 sg 源 ips 的 K8S 服务负载均衡器注释
- javascript - 想要根据按键在多个内容可编辑的 div 之间移动光标
- javascript - 如何在ajax调用的成功部分加载javascript文件
- plugins - java.lang.IllegalArgumentException:尝试从扩展向导运行多页编辑器后找不到 IDadditions
- python - 将列中的长列表转换为新的df
- android - RecyclerView中的按钮无法点击或选择
- linux - 从默认致命信号的信号处理程序返回
- python - 检查 python 列表是否遵循特定的重复模式
- python-3.x - Databricks python notebook 执行的日志文件
- mongodb - Mongodb - $in 模拟查询 AND,而不是 OR