Python sum和groupby不适合我使用pandas

Python sum和groupby不适合我使用pandas,python,pandas,csv,Python,Pandas,Csv,我有以下数据集: 我想使用pandas按nombre(名称)对列cantidad(金额)分组求和,因此我尝试了: 第一行很惊讶,因为“Ana”是一个常见的名称,所以我检查了: 好吧,那么。。。“Ana”的总数是434而不是1。发生了什么事?我做错了什么?您需要skipinitialspace=True因为列nombre中的值后面有空格,所以'Ana','Ana','Ana'。。。是单独分组的: historical_names = pd.read_csv('nombres-1920-192

我有以下数据集:

我想使用pandas按
nombre
(名称)对列
cantidad
(金额)分组求和,因此我尝试了:

第一行很惊讶,因为“Ana”是一个常见的名称,所以我检查了:


好吧,那么。。。“Ana”的总数是434而不是1。发生了什么事?我做错了什么?

您需要
skipinitialspace=True
因为列
nombre
中的值后面有空格,所以
'Ana'
'Ana'
'Ana'
。。。是单独分组的:

historical_names = pd.read_csv('nombres-1920-1924.csv', skipinitialspace =True)
print (historical_names.head())

resume = historical_names.groupby('nombre')['cantidad'].sum()
print (resume['Ana'])
437

a = historical_names.loc[historical_names['nombre'] == 'Ana', 'cantidad']
print (a)
5        113
10340    138
18776      1
23114    183
26523      2
Name: cantidad, dtype: int64

a = historical_names.loc[historical_names['nombre'] == 'Ana', 'cantidad'].sum()
print (a)
437



真有趣。什么返回
resume=historical_names.groupby('nombre')['cantidad'].sum()
?@jezrael,感谢您的关注。结果是一样的。你可以从@JohnGalt下载数据集,我将在回家后添加。我已经检查了数据类型,像往常一样快速地得到object(nombre)、np.int64(cantidad)和np.int64(anio)
我想出了历史名称。nombre=historical\u names.nombre.apply(lambda x:x.strip())
你有什么见解可以分享一下这个
apply
.str.strip()
的性能差异吗?@Uvar-处理
NaN
s-
str.strip()
handle
NaN
s,但是
应用(lambda x:x.strip())
不适用。
historical_names = pd.read_csv('nombres-1920-1924.csv')
print (historical_names.head())

historical_names['nombre'] = historical_names['nombre'].str.strip()
resume = historical_names.groupby('nombre')['cantidad'].sum()
print (resume['Ana'])
437
historical_names = pd.read_csv('nombres-1920-1924.csv')
print (historical_names.head())

resume = historical_names.groupby('nombre')['cantidad'].sum()
print (resume['Ana'])
434

a = historical_names.loc[historical_names['nombre'] == 'Ana', 'cantidad']
print (a)
5        113
10340    138
23114    183
Name: cantidad, dtype: int64

a = historical_names.loc[historical_names['nombre'] == 'Ana', 'cantidad'].sum()
print (a)
434