DataFrame列表中的总数

时间:2019-01-27 12:52:37

标签: python python-3.x pandas numpy jupyter-notebook

我试图对DataFrame中列表中的数字求和。 TypeError(int())参数必须是使用sum()方法产生的字符串,类似字节的对象或数字,而不是'list'),我找不到更好的方法。

这是我的DataFrame:

    movie_id    user_id rating  title
0   1   [1, 2, 5]   [5, 4, 4]   [Toy Story (1995), Toy Story (1995), Toy Story...
1   2   [1, 5]  [3, 3]  [GoldenEye (1995), GoldenEye (1995)]
2   3   [1] [4] [Four Rooms (1995)]
3   4   [1] [3] [Get Shorty (1995)]
4   5   [1] [3] [Copycat (1995)]
5   6   [1] [5] [Shanghai Triad (Yao a yao yao dao waipo qiao)...
6   7   [1] [4] [Twelve Monkeys (1995)]
7   8   [1] [1] [Babe (1995)]
8   9   [1] [5] [Dead Man Walking (1995)]

我想对“评级”列的每个列表中的数字求和,并添加一列以显示每一行的总和。例如 : [5, 4, 4] => 13, [3, 3] => 6等...

这是我的代码的简要视图:

s = df.loc[0:0, 'rating'].tolist()

输出:[[5, 4, 4]]

到目前为止,我已经尝试过:

s = sum(int(i) for i in s)
s

但这最终导致TypeError。

我想是否可以将s的输出转换为[5, 4, 4]之类的列表将解决问题,还是有更好的方法呢?

而且,由于我一次只能累加一行,有没有办法一次累加每一行的列表?

2 个答案:

答案 0 :(得分:1)

您可以将sum传递给Series.map

df = pd.DataFrame({'ratings': [[1, 2], [4, 5]]})
df['sums'] = df['ratings'].map(sum)
print(df)
#    ratings  sums
#  0  [1, 2]     3
#  1  [4, 5]     9

答案 1 :(得分:1)

您可以执行以下操作:

sed '/^#start/,/^\s*$/!b;/^\s*$/i\d' file

sed '/^#start/,/^\s*$/!b;/^\s*$/a\d' file

-将函数df['rating'].apply(sum) Out: 6 13 4 .. type: Object 应用于列sum的每一行。

您可以将其分配给'rating'

df