2015-04-02 3 views
0

Я хотел бы создать две суммы, одну условную сумму на date и type, и одну условную только на date. Вот выдержка из моего кадра данных:Pandas: суммировать строки по группам

       0    1    2    3 
date  type                
2003-01-01 unemp 1.733275e+09 2.067889e+09 3.279421e+09 3.223396e+09 
2005-01-01 unemp 1.413758e+09 2.004171e+09 2.383106e+09 2.540857e+09 
2007-01-01 unemp 1.287548e+09 1.462072e+09 2.831217e+09 3.528558e+09 
2009-01-01 unemp 2.651480e+09 2.846055e+09 5.882084e+09 5.247459e+09 
2011-01-01 unemp 2.257016e+09 4.121532e+09 4.961291e+09 5.330930e+09 
2013-01-01 unemp 7.156784e+08 1.182770e+09 1.704251e+09 2.587171e+09 
2003-01-01 emp 6.e+09 9.692455e+09 2.288822e+10 3.215460e+10 
2005-01-01 emp 5.647393e+09 9.597211e+09 2.121828e+10 3.107219e+10 
2007-01-01 emp 4.617047e+09 8.030113e+09 2.005203e+10 2.755665e+10 

Теперь я попытался

weightsDf.groupby(level=[0,1]).sum() 
weightsDf.groupby(level=[0,1]).apply(lambda x: x.sum()) 

Все это дает мне сумму на колонку, а не сумма по всем колонкам. Для случая, когда я хотел, чтобы обусловить как на type и date, я могу просто сделать

weightsDf.sum(axis=1) 

Но как я перехожу в случае, когда я хочу кондиционировать только на date? В отличие при нанесении на фрейме данных,

weightsDf.groupby(level=[0,1]).sum(axis=1) 

не принимает аргумент axis. I мог бы расколоть фрейм данных для второго уровня, а затем суммировать по строке, но это кажется слишком сложным.

+1

Первая сумма столбцов, а затем группой? '' weightsDf.sum (axis = 1) .groupby (level = [0,1]). sum() '' Это то, что вы ищете? – joris

+0

@joris: Работы :) – FooBar

ответ

0

Вы можете сделать сумму по столбцам, а затем группа:

weightsDf.sum(axis=1).groupby(level=[0,1]).sum() 
Смежные вопросы