我试图对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]
之类的列表将解决问题,还是有更好的方法呢?
而且,由于我一次只能累加一行,有没有办法一次累加每一行的列表?
答案 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