所以我一直在尝试获取行的总和并将它们添加到新列中。我的数据类似于:
Animal num1 num2
0 22-14 36.6 213
1 39-14 42.44 141
2 40-14 39 157
我尝试过这样的事情:
df['sum'] = df['num1'] + df['num2']
但是,这只是将信息结合在一起,而不是总结它。有没有办法做到这一点?
答案 0 :(得分:3)
您的问题是您的列实际上是字符串,而不是数字。当您尝试对列进行求和时,字符串只会连接(例如'cat' + 'dog'
成为'catdog'
)。
您可以使用pandas.DataFrame.convert_objects
将其转换为数字。
import pandas as pd
from io import StringIO
s = """ Animal num1 num2
0 22-14 36.6 213
1 39-14 42.44 141
2 40-14 39 157"""
df = pd.read_csv(StringIO(s), sep='\s+', dtype=str)
# You can ignore the code above this point, I was just re-creating your DataFrame.
df = df.convert_objects(convert_numeric=True)
在此之后,它应该如上所述完全正常工作,所以:
df['sum'] = df['num1'] + df['num2']
print(df)
# Animal num1 num2 sum
#0 22-14 36.60 213 249.60
#1 39-14 42.44 141 183.44
#2 40-14 39.00 157 196.00
答案 1 :(得分:3)
sum命令采用一个axis参数,可用于对列(1)或行(0)求和。
df = pd.DataFrame({'a':[4,5,2],'b':[5,2,9]})
df['c'] = df.sum(axis=1)
此方法只接受数字,你的第一列是一个字符串,所以你必须解析它。例如,如果要从数字中删除连字符,可以使用命令:
df['Animal'] = df['Animal'].apply(lambda x: int(x.replace('-','')))
或者如果你想完全忽略第一列,你就不能包含它。
df['sum'] = df.iloc[:,1:].sum(axis = 1)