2015-03-25 206 views
0

我有一个表“A”是这样的:Python的大熊猫:分裂和追加?

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 pandas?

回答

0

一种方法是将一个函数应用到您的DF分裂“抄送”栏,并创建包含每个分裂国家及其相关计数一个新的字典,然后你可以从这个构造一个新的DF,GROUPBY国家和对数进行总和:

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