首页 > 解决方案 > 我如何计算我的 DataFrame 中的所有类型?

问题描述

我有一个名为 df_imdb 的 DataFrame:

在此处输入图像描述

每行包含有关电影的信息,此 DataFrame 有一个列名“流派”,显示该电影的流派,可能有多个流派,例如[{'id': 53, 'name': 'Thriller'}, {'id': 28, 'name': 'Action'}, {'id': 9648, 'name': 'Mystery'}]

我想找出这部电影中使用最多的类型是什么(在这个 DataFrame 中找到前 3 个最常用的类型)

标签: python-3.xpandaslistdataframedictionary

解决方案


数据是字典列表,这里有多个选项:

选项 1:纯 pandas,将与 key 关联的值转换name为 aSeries并使用value_counts

df = pd.DataFrame({'genres':[[{'id': 53, 'name': 'Thriller'}, {'id': 28, 'name': 'Action'}, {'id': 9648, 'name': 'Mystery'}],[{'id': 53, 'name': 'Thriller'}, {'id': 30, 'name': 'Blah'}, {'id': 9648, 'name': 'Mystery'}]]})

df['genres'].apply(lambda x: pd.Series([i['name'] for i in x]))\
.stack().value_counts()

你得到

Thriller    2
Mystery     2
Action      1
Blah        1

选项 2:将值转换为列表并使用Counter

from collections import Counter
l_genres = df['genres'].apply(lambda x: [i['name'] for i in x]).sum()
Counter(l_genres)

你得到

Counter({'Thriller': 2, 'Action': 1, 'Mystery': 2, 'Blah': 1})

df['genres'].apply(lambda x: pd.Series([i['name'] for i in x])).stack().value_counts()

编辑:数据类型是 str 而不是列表,首先使用literal_eval

from ast import literal_eval
df['genres'] = df['genres'].apply(literal_eval)

推荐阅读