python - 计算列字符串值中包含的每个单词的频率

标签 python pandas

例如,我有一个像这样的数据框:

data = {'id': [1,1,1,2,2],
        'value': ['red','red and blue','yellow','oak','oak wood']
}
df = pd.DataFrame (data, columns = ['id','value'])

我想要:

id value   count
1  red     2
1  blue    1
1  yellow  1
2  oak     2
2  wood    1

非常感谢!

最佳答案

pandas 0.25+ 的解决方案 DataFrame.explode通过 Series.str.split 创建的列表和 GroupBy.size :

df1 = (df.assign(value = df['value'].str.split())
         .explode('value')
         .groupby(['id','value'], sort=False)
         .size()
         .reset_index(name='count'))
print (df1)
   id   value  count
0   1     red      2
1   1     and      1
2   1    blue      1
3   1  yellow      1
4   2     oak      2
5   2    wood      1

对于较低的 pandas 版本,请使用 DataFrame.set_indexSeries.str.splitDataFrameexpand=True,通过 DataFrame.stack reshape ,从 MultiIndex Series 创建列,并使用与上面相同的解决方案:

df1 = (df.set_index('id')['value']
         .str.split(expand=True)
         .stack()
         .reset_index(name='value')
         .groupby(['id','value'], sort=False)
         .size()
         .reset_index(name='count')
         )
print (df1)
   id   value  count
0   1     red      2
1   1     and      1
2   1    blue      1
3   1  yellow      1
4   2     oak      2
5   2    wood      1

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

相关文章:

python - Tesseract 3.x 多处理怪异行为

python - flask Restful : passing parameters to GET request

python - 对 Pandas 数据帧的所有元素应用 if/then 条件

python - 如何根据值在另一个数据框中的位置获取一个数据框中的值

python - pandas - 根据列值添加缺失的行以具有 linspace

python - 为什么 Python 对象中的 `self` 是不可变的?

python - 在 Linux 中编写守护进程或服务的示例

python - 无法将值转换为轴单位' - 在为 df 创建绘图时

python - 为 Pandas 中的一组列设置新值

python - 类似pandas语句的SQL where子句