Pandas基于列压缩数据框

Am1*_*3zA 3 python pandas

我正在读取一个返回我正在使用的JSON的API

from pandas.io.json import json_normalize 
flatten = json_normalize(data['results'])
Run Code Online (Sandbox Code Playgroud)

为了展平JSON,现在输出就像

                                     breakdowns                 metric                  time         value   
0      [{u'key': u'platform', u'value': u'ios'}]      fb_ad_network_imp    2018-08-29T07:00:00+0000  12
1  [{u'key': u'platform', u'value': u'android'}]      fb_ad_network_imp    2018-08-29T07:00:00+0000  32
2      [{u'key': u'platform', u'value': u'ios'}]  fb_ad_network_request    2018-08-29T07:00:00+0000  33    
3  [{u'key': u'platform', u'value': u'android'}]  fb_ad_network_request    2018-08-29T07:00:00+0000  132 
Run Code Online (Sandbox Code Playgroud)

现在我想根据平台将这4行压缩成2行,如下所示:

           platform    date         clicks     impressions
0          ios         2018-08-29   33         12
1          android     2018-08-29   132        32
Run Code Online (Sandbox Code Playgroud)

我也映射了这些名字:

fb_ad_network_request- > clicks
fb_ad_network_imp- >impressions

最好的方法是什么?

WeN*_*Ben 5

你可以使用pivot_table后压平dict

dddd['platform']=pd.concat([pd.DataFrame(x) for x in dddd.breakdowns]).value.values
dddd.pivot_table(index=['platform','time'],columns='metric',values='value',aggfunc=sum).reset_index()
Out[237]: 
metric platform        time  fb_ad_network_imp  fb_ad_network_request
0       android  2018-08-29                 32                    132
1           ios  2018-08-29                 12                     33
Run Code Online (Sandbox Code Playgroud)