2015-03-25 2 views
0

У меня есть таблица «а», как это:Python pandas: split и append?

count cc 
    68 IL-US 
    1 IL 
    12 US 
    5 US 
    1180 US-DE 
    4424 GB-ES-DE-A1-FR 
    0 
    20 DE 
    37 A1 

Я хочу иметь сумму отсчетов для каждой страны, как это:

count cc 
    1265 US 
    69  IL 
    4424 GB 
    4424 ES 
    4424 FR 
    5624 DE 
    4461 A1 

Я попробовал это, но это не расколы, это только группирует их и просуммировать отсчеты:

a.head(50).groupby(['cc']).aggregate(sum)['count'] 

кто-нибудь знает, как я могу это сделать в IPython панд?

ответ

0

Один из способов - применить функцию к вашему df, чтобы разбить столбец «cc» и создать новый dict, содержащий каждую разделенную страну и связанный с ней счет, затем вы можете построить новый df из этой группы, по стране и выполнять сумму на счет:

In [72]: 

from collections import defaultdict 
master = defaultdict(list) 
def func(x): 
    if pd.isnull(x['cc']): 
     return 
    t = defaultdict(list) 
    for v in x['cc'].split('-'): 
     master['country'].append(v) 
     master['count'].append(x['count']) 

df.apply(lambda x: func(x), axis=1) 
df = pd.DataFrame(dict(master)) 
df 
Out[72]: 
    count country 
0  68  IL 
1  68  US 
2  1  IL 
3  12  US 
4  5  US 
5 1180  US 
6 1180  DE 
7 4424  GB 
8 4424  ES 
9 4424  DE 
10 4424  A1 
11 4424  FR 
12  20  DE 
13  37  A1 
In [73]: 

df.groupby('country')['count'].sum() 
Out[73]: 
country 
A1 4461 
DE 5624 
ES 4424 
FR 4424 
GB 4424 
IL  69 
US 1265 
Name: count, dtype: int64 

Если вы хотите, идентификатор страны обратно в качестве колонки можно назвать reset_index:

In [74]: 

df.groupby('country')['count'].sum().reset_index() 
Out[74]: 
    country count 
0  A1 4461 
1  DE 5624 
2  ES 4424 
3  FR 4424 
4  GB 4424 
5  IL  69 
6  US 1265