Pandas,将一行中的值相加形成一个 "totals" 列
Pandas, summing values in a row to form a "totals" column
所以我一直在尝试获取行的总和并将它们添加到新列中。我的数据是这样的:
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']
但这只是将信息组合在一起,并没有求和。有办法吗?
您的问题是您的列实际上是字符串,而不是数字。当您尝试对列求和时,字符串只是连接起来(例如 '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
sum 命令带有一个轴参数,可用于对列 (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)
所以我一直在尝试获取行的总和并将它们添加到新列中。我的数据是这样的:
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']
但这只是将信息组合在一起,并没有求和。有办法吗?
您的问题是您的列实际上是字符串,而不是数字。当您尝试对列求和时,字符串只是连接起来(例如 '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
sum 命令带有一个轴参数,可用于对列 (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)