2015-12-30 8 views
2

У меня есть dataframe, где я хочу сгруппировать по первой части поля идентификатора. Например, у меня есть следующее:Pandas groupby slice строки

>>> import pandas as pd 
>>> df=pd.DataFrame(data=[['AA',1],['AB',4],['AC',5],['BA',11],['BB',2],['CA',9]], columns=['ID','Value']) 
>>> df 
    ID Value 
0 AA  1 
1 AB  4 
2 AC  5 
3 BA  11 
4 BB  2 
5 CA  9 
>>> 

Как сгруппировать по первой букве поля идентификатора?

В настоящее время я могу это сделать, создав новый столбец, а затем группировка на этом, но я полагаю, есть более эффективный способ:

>>> df['GID']=df['ID'].str[:1] 
>>> df.groupby('GID')['Value'].sum() 
GID 
A 10 
B 13 
C  9 
Name: Value, dtype: int64 
>>> 

ответ

4

Вам нужно будет создать ключ группировки так или иначе, просто не обязательно на самом DataFrame, например:

df.groupby(df.ID.str[:1])['Value'].sum() 
+0

Спасибо, именно то, что я искал. Не понимал, что вы можете группироваться в такой серии. – AJG519

+1

Или '.str [0]', поскольку вы просто хотите, чтобы первый –

+0

@jezrael не забывал, что существует отличная разница между '.str [0]' и '.str [: 1]' в случае пустых строк ... –