打印目标列的频繁出现值的前2位

时间:2018-02-13 14:02:46

标签: python pandas pandas-groupby

我有三个列,如下所示,并尝试返回第三列的top1和top2最高计数。我希望生成此输出,如预期输出中所示。 数据:

print(df)

   AGE GENDER rating
0   10      M     PG
1   10      M      R
2   10      M      R
3    4      F   PG13
4    4      F   PG13

代码:

 s = (df.groupby(['AGE', 'GENDER'])['rating']
       .apply(lambda x: x.value_counts().head(2))
       .rename_axis(('a','b', 'c'))
       .reset_index(level=2)['c'])

输出:

print (s)

a   b
4   F    PG13
10  M       R
    M      PG
Name: c, dtype: object

预期输出:

print (s[F])
('PG13')

print(s[M])

('PG13', 'R')

1 个答案:

答案 0 :(得分:1)

我认为你需要:

s = (df.groupby(['AGE', 'GENDER'])['rating']
       .apply(lambda x: x.value_counts().head(2))
       .rename_axis(('a','b', 'c'))
       .reset_index()
       .groupby('b')['c']
       .apply(list)
       .to_dict()
       )
print (s)
{'M': ['R', 'PG'], 'F': ['PG13']}