如何使用python找到最常见的集合?

时间:2016-06-16 23:23:35

标签: python pandas set

我有一个pandas数据框,其中一列是学生所有课程的列表。索引是学生的ID。

我想找到所有学生最常见的课程。例如,如果数据框如下所示:

ID    |     Courses
1           [A, C]
2           [A, C]
3           [A, C] 
4           [B, C]
5           [B, C]
6           [K, D] 
...

然后我希望输出返回最常见的集合及其频率,如:

{[A,C]: 3, [B,C]: 2}

2 个答案:

答案 0 :(得分:5)

您可以先将list转换为tuples,然后转换为value_counts。上次使用to_dict

print (df.Courses.apply(tuple).value_counts()[:2].to_dict())
{('A', 'C'): 3, ('B', 'C'): 2}

答案 1 :(得分:2)

import pandas as pd

# create example data
a = range(6)
b = [['A', 'C'], ['A', 'C'], ['A', 'C'], ['B', 'C'], ['B', 'C'], ['K', 'D']]
df = pd.DataFrame({'ID': a, 'Courses': b})

# convert lists in Courses-column to tuples (which some parts of pandas need)
df['Courses'] = df['Courses'].apply(lambda x: tuple(x))
print(df.Courses.value_counts())

输出:

(A, C)    3
(B, C)    2
(K, D)    1
Name: Courses, dtype: int64

编辑(接受我的回答):

jezrael描述(首先是对我的回答的评论)相同方法的更紧凑版本:

a = range(6)
b = [['A', 'C'], ['A', 'C'], ['A', 'C'], ['B', 'C'], ['B', 'C'], ['K', 'D']]
df = pd.DataFrame({'ID': a, 'Courses': b})

print(df.Courses.value_counts())  # list->tuple and counting in one line!