对子DataFrame重复DataFrame行

如何解决对子DataFrame重复DataFrame行

来源是带有嵌套字典的JSON文件。

我创建了一个顶层的defaultdict(dict)和一个for循环,以获取第1至7行,State,Size,Pop列的数据帧。

在上面的for循环中,我再次创建了另一个(子级)defaultdict(dict)和for循环,以获取第1至2行,City,Size,Pop列的数据框

我将孩子defaultdict(dict)附加到顶部defaultdict(dict)

父数据帧中的行应针对子DataFrame重复

所需的输出

    State   Size    Pop   City      Size    Pop
1    MH     120     300    MU        100    150
2    MH     120     300    PU        80     110
3    MH     120     300    NG        75     120
4    MH     120     300    PC        85     110
5    GJ     110     250    SU        70     100
6    GJ     110     250    VA        75     80
7    GJ     110     250    AH        85     120

另一个带有输入JSON的示例

输入JSON:

{
    "datatop": [
        {
            "datastate": {
                "attributes": {
                    "Name": "ABC","Place": "123"
                },"children": [
                    {
                        "datacity": {
                            "attributes": {
                                "CName": "EFG","CPlace": "12345"
                            }
                        }
                    },{
                        "datacity": {
                            "attributes": {
                                "CNAME": "HIJ","CPlace": "6789"
                            }
                        }
                    }
                ]
            }
        },{
            "datastate": {
                "attributes": {
                    "Name": "XYZ","Place": "456"
                },"children": [
                    {
                        "datacity": {
                            "attributes": {
                                "CName": "LMN","CPlace": "1123"
                            }
                        }
                    },{
                        "datacity": {
                            "attributes": {
                                "CName": "OPQ","CPlace": "22345"
                            }
                        }
                    }
                ]
            }
        }
    ],"totalCount": "2"
}

预期输出:

Name    Place   CName   CPlace
ABC     123     EFG     12345
ABC     123     HIJ     6798
XYZ     456     LMN     1123
XYZ     456     OPQ     22345

解决方法

通过更改方法,我能够实现预期的输出。

之前,我试图对子数据循环中的数据帧中的行重复父数据帧中的行(我从父for循环中获得的行)。

新方法: 在父for循环之前创建了一个空列表。 将父级的键值对添加到子级的循环中,并创建了一个大字典,其中包含父级和子级(嵌套)的键值对。为了创建唯一键,我使用了父级和子级索引的字符串串联进行循环。 一旦子for循环结束,在其外部(在父for循环的末尾),我将字典转换为数据帧并将其附加到列表中。 父for循环完成后,列表即会完成,并带有数据帧。 最后,我对列表中的数据帧进行了串联。

import json
import pandas as pd
from collections import defaultdict

with open("./input.json") as file:
    filedata = json.load(file)

data = filedata['datatop']

dflist = []

for i in range (len(data)):

    attribute = (data[i])['datastate']['attributes']
    child = (((data[i]['datastate'])['children']))

    def_dct_chd = defaultdict(dict)

    # For Loop to Iterate over all the subnets of the L3OUT EPG
    for j in range (len(child)):
        def_dct_chd[str(i)+str(j)]['Name'] = attribute['Name']
        def_dct_chd[str(i)+str(j)]['Place'] = attribute['Place']
        def_dct_chd[str(i)+str(j)]['CName'] = child[j]['datacity']['attributes']['CName']
        def_dct_chd[str(i)+str(j)]['CPlace'] = child[j]['datacity']['attributes']['CPlace']

    # Create the Data Frames out of the dictionary and append it to the list
    dflist.append(pd.DataFrame(def_dct_chd).T)

# concatenate all the dictionaries inside the list
finaldf = pd.concat(dflist)

finaldf = finaldf.reset_index(drop=True)
print(finaldf)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?