python - 基于列的 Pandas squash 数据框

标签 python pandas

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

from pandas.io.json import json_normalize 
flatten = json_normalize(data['results'])

为了扁平化 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 

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

           platform    date         clicks     impressions
0          ios         2018-08-29   33         12
1          android     2018-08-29   132        32

我还映射了这些名称:

fb_ad_network_request -> 点击次数
fb_ad_network_imp -> 展示次数

最好的方法是什么?

最佳答案

您可以在将 dict 展开后使用 pivot_table

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

关于python - 基于列的 Pandas squash 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52170676/

相关文章:

python-3.x - 如何根据唯一字符串值将 pandas 数据帧拆分为多个数据帧而不聚合

python - 从 Pandas 单元格中提取列表并使用列表元素作为新列

python - 如何使用 Selenium 和 Python 启动 Tor 浏览器

带有正则表达式的 Python 3.7 : Why can I no longer substitute with a string containing a backslash (\)?

python - 不小心在 shell 脚本中使用了 mv 并移动了文件。 shell脚本在mac上默认运行在哪里?

python - pandas dataframe to_csv 在每行后写入空行

python - 当 groupby 另一个时, Pandas 在组中获得最少的一列

python - 将列表列表转换为数据框

python - 如何在Python中修复 “TypeError”?

Python在JSON结构中获取 sibling