【问题标题】:Counting frequency words per date计算每个日期的频率词
【发布时间】:2020-11-07 14:03:16
【问题描述】:

我想计算每个日期有多少句子包含特定单词。 例如:

Date    Sentences
2020-10-22 Word1 bla bla bla Word2
2020-10-22 Bla bla bla bla
2020-10-22 Word3 bla bla 
2020-10-22 Word1 bla bla bla
2020-10-23 Word3 bla 
2020-10-23 Word1 bla bla 
...

我要搜索的单词用 Wordx 标识(这只是一个示例,它们是 trump、money 等单词),而 bla bla bla 只是其他文本(例如,不会赢,... )。 对于每个单词,Word1,Word3,...,我想知道它在特定日期的句子中使用的次数。 我的方法是创建一个我想在我的句子中查找的特定单词的列表,并使用 groupby 日期来查看它们的日期,总结每个单词在一段时间内使用的次数。 所以是这样的:

Mylist=[‘word1’,’word3’]
df[‘Sentences’].str.contains(‘|’, Mylist).groupby([‘Date’]).sum()

我没有得到预期的输出,所以我认为我在我的代码中写了错误的东西,或者可能是他的问题的错误方法。

我想要这样的东西:

Word1       Freq
2020-10-22  2
2020-10-23  1

Word3      Freq
2020-10-22 1
2020-10-23 1

【问题讨论】:

  • 也许使用以单词为键并将结果数据框作为值的字典?

标签: python pandas


【解决方案1】:

你走在正确的道路上,只是轻微的语法更正:

  1. 为了在您选择单个列后按Date 分组,Date 必须是索引。
  2. series.str.containspattern-to-be-found 作为第一个参数,无论是字符序列还是正则表达式。
### sample data, always provide a callable line of code
### or a clean table that can be parsed by `read_clipboard`
df = pd.DataFrame({
    'Date': ['10/22', '10/22', '10/22', '10/22', '10/23', '10/23'],
    'Sentences': [
        'Word1 bla bla bla Word2',
        'Bla bla bla bla',
        'Word3 bla bla',
        'Word1 bla bla bla',
        'Word3 bla',
        'Word1 bla bla'
    ]
}).set_index('Date')

Mylist = ['Word1', 'Word3']
out = { # dict comprehension
    ### actual solution
    word: df['Sentences'].str.contains(word).groupby('Date').sum()
    for word in Mylist
}

for key, val in out.items():
    print(key)
    print(val, '\n')
    

输出

Word1
Date
10/22    2
10/23    1
Name: Sentences, dtype: int64

Word3
Date
10/22    1
10/23    1
Name: Sentences, dtype: int64

请注意,此解决方案不会计算同一句子中某个单词的多次出现次数,例如 "Word1 should return two Word1 counts",它只会返回 True,而 groubpy 调用会将其视为一个。

如果您希望计算同一句子中的多次出现次数,可以使用series.str.findall,如下所示:

df['Sentences'].str.findall(word).map(len).groupby('Date').sum()

【讨论】:

  • 非常感谢您的帮助和解答 RichieV。
猜你喜欢
  • 2023-03-22
  • 1970-01-01
  • 2019-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-13
  • 2021-08-07
相关资源
最近更新 更多