python - Pandas df.mode,列中每个单元格具有多个值
问题描述
我有一个带有Keywords
列的数据框。该列中的每个单元格都有 5-10 个单独的值(逗号分隔),由 1-3 个单词组成。如何计算列中出现次数最多的关键字?
我已经尝试过df.Keywords.mode
,但它返回每个单元格的所有值,因为它们显然不会在每个单元格中多次出现。
这里有一张图片来澄清:
感谢所有输入,
谢谢!
解决方案
首先使用Series.str.split
with expand=True
for DataFrame 和 reshape by DataFrame.stack
,然后 count bySeries.value_counts
并通过 获得最高值Series.head
:
df = pd.DataFrame({'Keywords':['aa,bb,vv,vv','aa,aa,cc,bb','zz,bb,aa,ss']})
N = 5
df1 = (df.Keywords.str.split(',', expand=True)
.stack()
.value_counts()
.head(N)
.rename_axis('val')
.reset_index(name='count'))
print (df1)
val count
0 aa 4
1 bb 3
2 vv 2
3 zz 1
4 cc 1
如果没有缺失值,另一种解决方案是展平拆分列表并按以下方式计数Counter
:
from collections import Counter
N = 5
df1 = pd.DataFrame(Counter([y for x in df.Keywords for y in x.split(',')]).most_common(N),
columns=['val','count'])
print (df1)
val count
0 aa 4
1 bb 3
2 vv 2
3 zz 1
4 cc 1
推荐阅读
- python - 如何呈现 HTML 模板?
- c# - 在 Entity Framework Core 中更新多对多关系中的错误
- python - 如何从 Python 创建一个非阻塞命名管道?
- java - 如果没有扩展名称,如何通过 java 获取文件类型(图像/音频或视频)
- c# - 高效地“剪切”多个线程的作业列表
- android - 使用 Volley 请求 JSON
- android - 过渡动画在横向模式下不起作用
- width - c# BitmapImage Width 和 Height 等于 1
- python - 验证从 RDBMS 迁移到 mongoDB 的数据的工具
- python - Python中的货币转换器