2017-09-04 79 views
1

工作,我有以下数据集:总和与GROUPBY不为我用熊猫

enter image description here

我想​​(名)用熊猫来总结列cantidad(金额)分组,所以我曾尝试: enter image description here

第一行是由于惊讶的 “安娜” 是一个共同的名字,所以我检查: enter image description here

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

+0

真的很有趣。什么返回'resume = historical_names.groupby('nombre')['cantidad']。sum()'? – jezrael

+0

@jezrael,谢谢你的关注。结果是一样的。您可以从[这里]下载数据集(http://datos.gob.ar/dataset/b8418d41-8e0c-4e85-8aa8-80d51a840132/resource/811bf426-fc36-4f20-b2e1-59bdbb938153/download/nombres-1920- 1924.csv) –

+0

@JohnGalt当我回到我的房子时,我会补充一点。我检查了dtypes,并且得到了对象(nombre),np.int64(cantidad)和np.int64(anio) –

回答

2

你需要skipinitialspace=True因为​​列中的值有尾随空格 - 所以'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 

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 
+0

像往常一样,速度非常快。 '我想出了historical_names.nombre = historical_names.nombre.apply(lambda x:x.strip())'你有什么洞察力来分享这个'apply'和'.str.strip( )'? – Uvar

+1

@Uvar - 有不同的处理'NaN'str.strip()'处理'NaN's,但'apply(lambda x:x.strip())'不是。 – jezrael