Pandas,连续汇总值以形成“总计”列

时间:2015-01-15 16:42:26

标签: pandas

所以我一直在尝试获取行的总和并将它们添加到新列中。我的数据类似于:

     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']

但是,这只是将信息结合在一起,而不是总结它。有没有办法做到这一点?

2 个答案:

答案 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)