如何循环数据透视表以创建字典列表,从每列的每一行获取索引和值

问题描述 投票:0回答:1

我这里有这个表,我试图从每列的每一行中获取值和设备类别,这样我就可以获得如下数据。

series: [{
        name: 'engaged_sessions',
        data: [{
            name: 'Desktop',
            y: 7765,
        }, {
            name: 'Mobile',
            y: 388
        },...
        name: 'event_count',
        data: [{
            name: 'Desktop',
            y: 51325,
        }, {
            name: 'Mobile',
            y: 4349
        },...

基本上遍历每一列,将设备类别和值放入字典列表中 这是数据透视表,

                 engaged_sessions  event_count  new_users  total_revenue  total_users
device_category                                                                      
Desktop                      7765        51325       6593              9         8021
Mobile                        388         4349        795              0          412
Smart Tv                        2           38          1              250          9
Tablet                         87          111         37              0           97

我尝试使用 for 循环并将每次迭代放入列表中,但它不太正确。我得到的最接近的是 to_dict() 方法,我认为这是迄今为止最好的选择。

这里的这个问题(Pandas to_dict数据结构,使用列作为字典索引)非常相似,但我正在尝试按每列进行分组,如果我使用groupby(df.cloumns)或groupby(['column'],[ 'column'])它为我提供了其中包含数字的对象,但没有提及它们是什么

python pandas pivot-table
1个回答
0
投票

如果

df
包含您的问题中的旋转数据框,您可以执行以下操作:

out = []
for c in df:
    out.append(
        {"name": c, "data": [{"name": k, "y": v} for k, v in df[c].to_dict().items()]}
    )
print(out)

打印:

[
    {
        "name": "engaged_sessions",
        "data": [
            {"name": "Desktop", "y": 7765},
            {"name": "Mobile", "y": 388},
            {"name": "Smart Tv", "y": 2},
            {"name": "Tablet", "y": 87},
        ],
    },
    {
        "name": "event_count",
        "data": [
            {"name": "Desktop", "y": 51325},
            {"name": "Mobile", "y": 4349},
            {"name": "Smart Tv", "y": 38},
            {"name": "Tablet", "y": 111},
        ],
    },
    {
        "name": "new_users",
        "data": [
            {"name": "Desktop", "y": 6593},
            {"name": "Mobile", "y": 795},
            {"name": "Smart Tv", "y": 1},
            {"name": "Tablet", "y": 37},
        ],
    },
    {
        "name": "total_revenue",
        "data": [
            {"name": "Desktop", "y": 9},
            {"name": "Mobile", "y": 0},
            {"name": "Smart Tv", "y": 250},
            {"name": "Tablet", "y": 0},
        ],
    },
    {
        "name": "total_users",
        "data": [
            {"name": "Desktop", "y": 8021},
            {"name": "Mobile", "y": 412},
            {"name": "Smart Tv", "y": 9},
            {"name": "Tablet", "y": 97},
        ],
    },
]
© www.soinside.com 2019 - 2024. All rights reserved.