pandas groupby使用字典值,应用sum

时间:2018-06-11 01:18:13

标签: python pandas

我有一个defaultdict:

dd = defaultdict(list,
        {'Tech': ['AAPL','GOOGL'],
         'Disc': ['AMZN', 'NKE']  }

和一个如下所示的数据框:

         AAPL AMZN GOOGL NKE
1/1/10   100  200  500   200
1/2/10   100  200  500   200
1/310    100  200  500   200

我想要输出的结果是根据字典的值对数据帧进行求和,并将键作为列:

         TECH DISC 
1/1/10   600  400 
1/2/10   600  400  
1/3/10   600  400 

pandas groupby文档说如果你传递一个字典就会这样做,但我最终得到的是使用这段代码的空df:

df.groupby(by=dd).sum()   ##returns empty df

2 个答案:

答案 0 :(得分:4)

以正确的方式创建dict,您可以by使用axis=1

# map each company to industry
dd_rev = {w: k for k, v in dd.items() for w in v}
# {'AAPL': 'Tech', 'GOOGL': 'Tech', 'AMZN': 'Disc', 'NKE': 'Disc'}

# group along columns
df.groupby(by=dd_rev,axis=1).sum() 

Out[160]: 
        Disc  Tech
1/1/10   400   600
1/2/10   400   600
1/310    400   600

答案 1 :(得分:1)

您可以使用1行中的defaultdict和字典理解来创建新的数据框

pd.DataFrame({x: df[dd[x]].sum(axis=1) for x in dd})
# output:

        Disc  Tech
1/1/10   400   600
1/2/10   400   600
1/310    400   600