【发布时间】:2019-01-28 14:09:53
【问题描述】:
movie_id user_id rating
0 1 [5, 2, 1, 6] [4, 4, 5, 4]
1 2 [5, 1] [3, 3]
2 3 [1] [4]
3 4 [1] [3]
4 5 [1] [3]
5 6 [1] [5]
6 7 [6, 1] [2, 4]
7 8 [1, 6] [1, 4]
8 9 [1, 6] [5, 4]
我正在尝试获取“评级”中每行大于 3 的数字计数。例如,[4, 4, 5, 5] => 4 / [3, 3] => 0。
这是我到目前为止所做的:
appr = df.copy()
appr['approval'] = appr['rating'].map(Counter)
appr
它输出:
movie_id user_id rating approval
0 1 [5, 2, 1, 6][4, 4, 5, 4] {4: 3, 5: 1}
1 2 [5, 1] [3, 3] {3: 2}
2 3 [1] [4] {4: 1}
3 4 [1] [3] {3: 1}
4 5 [1] [3] {3: 1}
5 6 [1] [5] {5: 1}
6 7 [6, 1] [2, 4] {2: 1, 4: 1}
7 8 [1, 6] [1, 4] {1: 1, 4: 1}
8 9 [1, 6] [5, 4] {5: 1, 4: 1}
我的目标是在每一行的“评分”中过滤掉不大于 3 的数字,并将它们的出现次数相加:
movie_id user_id rating approval appr_sum
0 1 [5, 2, 1, 6][4, 4, 5, 4] {4: 3, 5: 1} 4
1 2 [5, 1] [3, 3] {3: 2} 0
2 3 [1] [4] {4: 1} 1
3 4 [1] [3] {3: 1} 0
4 5 [1] [3] {3: 1} 0
5 6 [1] [5] {5: 1} 1
6 7 [6, 1] [2, 4] {2: 1, 4: 1} 1
7 8 [1, 6] [1, 4] {1: 1, 4: 1} 1
8 9 [1, 6] [5, 4] {5: 1, 4: 1} 2
我试过了:
s = appr['rating'].map
t = [x for x in s if x > 3]
t
但是有一个TypeError: 'method' 对象是不可迭代的,如果这部分代码是正确的,它并不是对它们的出现求和。
【问题讨论】:
标签: python python-3.x pandas dataframe jupyter-notebook