2017-09-06 50 views
1

在一个数据框中,我尝试将split-apply-combine与包含系列数据元素的列进行拆分。 (我已经搜查SO但没有发现有关的数据帧中的一系列事情。)Python Pandas在DataFrame中汇总系列数据

数据帧:

import pandas as pd 
from pandas import Series, DataFrame 

import numpy as np 

ex = {'account': [1, 1, 1, 2, 2], 
     'subaccount': [1, 2, 3, 1, 2], 
     'account_type': ['A', 'A', 'B', 'A', 'B'], 
     'data': [(1, 2, 3), (4, 5, 6), (7, 8, 9), (1, 3, 5), (2, 4, 6)]} 

df = DataFrame(ex, columns=['account', 'subaccount', 'account_type', 'data']) 

然后我GROUPBY和聚合,就像这样。

result = (df.groupby(['account', 'account_type']) 
      .agg({'subaccount': np.sum})) 

这给了我

     subaccount 
account account_type 
1  A    3 
     B    3 
2  A    1 
     B    2 

,但我要的是

     subaccount 
account account_type 
1  A   (5, 7, 9) 
     B   (7, 8, 9) 
2  A   (1, 3, 5) 
     B   (2, 4, 6) 

我可能失去了一些东西很明显,但解决的办法逃脱我。

回答

1

这工作

result = df.groupby(['account', 'account_type'])\ 
     .apply(lambda x : [sum(y) for y in zip(*x["data"])]) 

但是它可能是一个大的数据集

+0

这是一个小的数据集缓慢,使作品就好了。非常感谢! –

2
>>> df.groupby(['account', 'account_type']).apply(
     lambda group: tuple(group['data'].apply(pd.Series).sum())) 
account account_type 
1  A    (5, 7, 9) 
     B    (7, 8, 9) 
2  A    (1, 3, 5) 
     B    (2, 4, 6) 
dtype: object