2016-05-03 3 views
1

У меня есть следующий кадр данных:панды: суммируя число значений столбцов с GroupBy

url='https://raw.githubusercontent.com/108michael/ms_thesis/master/mpl.Bspons.merge.1' 
df=pd.read_csv(url, index_col=0) 
df['date'] = pd.to_datetime(df['date'], format='%Y-%m-%d') 
df = df.set_index(['date']) 

df.head(3) 

    state year unemployment log_diff_unemployment id.thomas party type bills id.fec years_exp session  name       disposition catcode  naics 
date                
2006-05-01 AK 2006 6.6  -0.044452 1440 Republican sen  s2686-109 S2AK00010 39 109  National Cable & Telecommunications Association  support  C4500 81 
2006-05-01 AK 2006 6.6  -0.044452 1440 Republican sen  s2686-109 S2AK00010 39 109  National Cable & Telecommunications Association  support  C4500 517 
2007-03-27 AK 2007 6.3  -0.046520 1440 Republican sen  s1000-110 S2AK00010 40 110  National Treasury Employees Union support  L1100 NaN 

Я хочу суммировать количество счетов, которые в каждой группе, определенной catcode > disposition > id.fec. Я использую следующий код:

df['billsum'] = df.groupby([pd.Grouper(level='date', freq='A'), 'catcode', \ 
     'disposition', 'id.fec']).bills.transform('sum') 

который возвращает

df.head(3) 

    state year unemployment log_diff_unemployment id.thomas party type bills id.fec years_exp session  name     disposition  catcode  naics billsum 
date                 
2006-05-01 AK 2006 6.6  -0.044452 1440 Republican sen  s2686-109 S2AK00010 39 109  National Cable & Telecommunications Association  support  C4500 81 s2686-109s2686-109 
2006-05-01 AK 2006 6.6  -0.044452 1440 Republican sen  s2686-109 S2AK00010 39 109  National Cable & Telecommunications Association  support  C4500 517  s2686-109s2686-109 
2007-03-27 AK 2007 6.3  -0.046520 1440 Republican sen  s1000-110 S2AK00010 40 110  National Treasury Employees Union support  L1100 NaN  s1000-110 

Вместо возвращения «число» счетов, содержащихся в каждой группе, код возвращает все счета, содержащиеся в каждой группе. Я просто хочу количество счетов в каждой группе. Кто-нибудь имеет представление о том, как сделать эту работу?

ответ

1

Я думаю, что вам нужно transformsize, не sum:

df['billsum'] = df.groupby([pd.Grouper(level='date', freq='A'), 'catcode', \ 
     'disposition', 'id.fec']).bills.transform('size') 

print df.head(3) 
      state year unemployment log_diff_unemployment id.thomas \ 
date                  
2006-05-01 AK 2006.0   6.6    -0.044452  1440 
2006-05-01 AK 2006.0   6.6    -0.044452  1440 
2007-03-27 AK 2007.0   6.3    -0.046520  1440 

       party type  bills  id.fec years_exp session \ 
date                  
2006-05-01 Republican sen s2686-109 S2AK00010   39  109 
2006-05-01 Republican sen s2686-109 S2AK00010   39  109 
2007-03-27 Republican sen s1000-110 S2AK00010   40  110 

                 name disposition \ 
date                  
2006-05-01 National Cable & Telecommunications Association  support 
2006-05-01 National Cable & Telecommunications Association  support 
2007-03-27    National Treasury Employees Union  support 

      catcode naics billsum 
date        
2006-05-01 C4500 81  2 
2006-05-01 C4500 517  2 
2007-03-27 L1100 NaN  1 
+0

Еще раз спасибо! :) –