我有一个列表列表和一个数据框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也非常大
答案 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