关键字:
- 用jieba切词
- 用expand 一列变多列
- 用stack 列转行
- 用group by + aggr 相同term的pv求和
上效果:
query pv 0 今日新鲜事 10000 1 今日头条 100 2 北京天气 2000 3 上海天气 3000
term pv 0 上海 3000 1 今日 10100 2 北京 2000 3 天气 5000 4 头条 100 5 新鲜事 10000
上代码:
import pandas as pd
import numpy as np
import jieba
df = pd.DataFrame({'query':['今日新鲜事','今日头条','北京天气','上海天气'],
'pv':[10000,100,2000,3000]})
#先用jieba切词
df['query'] = df['query'].apply(lambda x: ','.join(jieba.cut(x)))
df = (df.set_index(['pv'])['query']
.str.split(',', expand=True) # query切分并expand成多列
.stack() # 列转行
.reset_index(level=1, drop=True) # 删除列对齐后的空值
.reset_index(name='term')
.groupby('term').agg({'pv': np.sum}) # pv按term求和
.reset_index())