使用Pandas解码分层数据结构

8cdiaqws  于 6个月前  发布在  其他
关注(0)|答案(1)|浏览(47)

我有一个Pandas框架与样本分层数据如下

df1 = pd.DataFrame({'Level': ['0','1','2','2','3','2','3','1','2','3','3','4'],
                   'Type': ['P','U','D','I','D','PR','D','U','U','D','PR','D'],
                   'ID': ['P1','U1','D1','I1','D2','PR1','D3','U4','U8','DB1','PR3','DF1'],
                   'Value': ['','1', '0','1','0','1','0','1','1','0','1','0']
                  }
                )
df1

字符串
我想创建一个基于列“Level”的一一Map,它将被用作根来构建另一个类似0->1->2->3的嵌套框架。
“Level”列应被视为定义父级和子级关系,对于除1以外的任何级别,上一级是父级。
示例数据的预期输出如下

df2 = pd.DataFrame({'ID1': ['P','P','U1','U1','I1','PR1','U4','U8','U8','PR3'],
                   'ID2': ['U1','U4','D1','I1','D2','D3','U8','DB1','PR3','DF1'],
                    'Value':['1','1','0','1','0','0','1','0','1','0']
                  }
                )
df2

qfe3c7zg

qfe3c7zg1#

我希望我已经很好地理解了你的问题:

df1["Level"] = df1["Level"].astype(int)

all_data, tmp = [], {}
for lvl, id_, val in zip(df1.Level, df1.ID, df1.Value):
    if lvl == 0:
        tmp.setdefault(lvl, []).append(id_)
    else:
        parent = tmp.get(lvl - 1, [None])[-1]
        all_data.append((lvl, parent, id_, val))
        tmp.setdefault(lvl, []).append(id_)

out = pd.DataFrame(all_data, columns=["Level", "ID1", "ID2", "Value"]).sort_values(
    by="Level"
)
print(out)

字符串
印刷品:

Level  ID1  ID2 Value
0       1   P1   U1     1
6       1   P1   U4     1
1       2   U1   D1     0
2       2   U1   I1     1
4       2   U1  PR1     1
7       2   U4   U8     1
3       3   I1   D2     0
5       3  PR1   D3     0
8       3   U8  DB1     0
9       3   U8  PR3     1
10      4  PR3  DF1     0

相关问题