python - 计算 Pandas 中一列字符串中的单词

标签 python pandas group-by pandas-groupby

我有一个 pandas 数据框,其中包含给定时间段内的查询和计数,我希望将此数据框转换为唯一单词的计数。例如,如果数据框包含以下内容:

query          count
foo bar        10
super          8 
foo            4
super foo bar  2

我希望收到以下数据框。例如“foo”这个词在表中恰好出现了 16 次。

word    count
foo     16
bar     12
super   10

我正在使用以下函数,但这似乎不是执行此操作的最佳方法,而且它忽略了每一行的总计数。

def _words(df):
  return Counter(re.findall(r'\w+', ' '.join(df['query'])))

任何帮助将不胜感激。

提前致谢!

最佳答案

选项 1

df['query'].str.get_dummies(sep=' ').T.dot(df['count'])

bar      12
foo      16
super    10
dtype: int64

选项 2

df['query'].str.get_dummies(sep=' ').mul(df['count'], axis=0).sum()

bar      12
foo      16
super    10
dtype: int64

选项 3
numpy.bincount + pd.factorize
还强调了 cytoolz.mapcat 的使用。它返回一个迭代器,它映射一个函数并连接结果。这很酷!

import pandas as pd, numpy as np, cytoolz

q = df['query'].values
c = df['count'].values

f, u = pd.factorize(list(cytoolz.mapcat(str.split, q.tolist())))
l = np.core.defchararray.count(q.astype(str), ' ') + 1

pd.Series(np.bincount(f, c.repeat(l)).astype(int), u)

foo      16
bar      12
super    10
dtype: int64

选项 4
荒谬的使用东西...只需使用选项 1。

pd.DataFrame(dict(
    query=' '.join(df['query']).split(),
    count=df['count'].repeat(df['query'].str.count(' ') + 1)
)).groupby('query')['count'].sum()

query
bar      12
foo      16
super    10
Name: count, dtype: int64

关于python - 计算 Pandas 中一列字符串中的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46553274/

相关文章:

python - 第一个 pandas DataFrame 列索引大于 x

python: from x import y 改变之前的导入结果

python - 在 python 中滚动前 3 个月的唯一总和

python - 如何通过id对数据进行分组,并找出相邻数据的差异?

sql - 拆分单词并将其插入新表并计算这些单词

ruby - 一种根据日期/时间范围将 Ruby 对象分块到子数组中的方法?

python - 从列表列表中的对添加项目

python - Python中如何从当前对象的方法中调用另一个对象的方法

python - 将 pandas 系列从字符串转换为唯一的 int id

sql - 如何使用 GROUP BY 为不同列获取多个 SUM()