根据列表值列表创建Python列

时间:2019-05-17 08:25:38

标签: python pandas

我有一个列表列表和一个数据框df:

test_list=[[A,B,C],[A,B,D],[A,B,E],[F,G]] 

和数据框是

ID
 B
 C
 D
 E

列表列表的元素表示层次结构。我想在数据框中创建一个新列“类型”,其值表示其父级。

我的最终数据框应为:

value  parent
    B       A
    C       B 
    D       B
    E       B

我有一个非常大的数据集,而test_list也非常大

2 个答案:

答案 0 :(得分:2)

根据我对使用字典的评论,这是代码。

import pandas as pd
test_list=[["A","B","C"],["A","B","D"],["A","B","E"],["F","G"]]

dict = {}
for sublist in test_list:
    for n, elem in enumerate(sublist):
        if n != 0:
            dict[elem] = prev
        prev = elem

df = pd.DataFrame([dict.keys(), dict.values()]).T
df.columns= ['element', 'parent']
df.set_index('element', inplace=True)
print(df)

提供以下输出。

        parent
element       
B            A
C            B
D            B
E            B
G            F

答案 1 :(得分:1)

您可以使用词典。这是一个工作示例:

df = pd.DataFrame({'ID': ['B', 'C', 'D', 'E']})
test_list=[['A','B','C'],['A','B','D'],['A','B','E'],['F','G']]

parent = {}
for element in test_list:
    for i in range(len(element)-1):
        parent[element[i+1]] = element[i]

df['parent'] = [parent[x] for x in df['ID']]

In [1] : print(df)
Out[1] :  ID parent
0  B      A
1  C      B
2  D      B
3  E      B