我有一个数据框,其中一列包含一个元组列表的列表。我想将此元组列表的列表解压缩为数据帧中N个行的行,其中N为元组列表的列表的长度。我尝试使用其他相关主题中的解决方案,但无法解决我的问题
import pandas as pd
import numpy as np
index element Lanes Category
0 [[(A, A), (B, B)], M 1
[(B, B), (C, C)]]
1 [[(A, A), (D, D)], B 2
[(D, D), (L, L)],
[(L, L), (O, O)]]
鉴于此输入数据帧,如何将其转换为长格式,从而导致:-
index element Lanes Category
0 (A, A), (B, B) M 1
1 (B, B), (C, C) M 1
2 (A, A), (D, D) B 2
3 (D, D), (L, L) B 2
4 (L, L), (O, O) B 2
答案 0 :(得分:1)
这是适应@WenYoBen's answer的一种方法:
lens = df.element.str.len()
pd.DataFrame({'element': sum(df.element.tolist(),[]),
'Category': df.Category.repeat(lens).values,
'Lanes': df.Lanes.repeat(lens).values})
element Category Lanes
0 [(A, A), (B, B)] 1 M
1 [(B, B), (C, C)] 1 M
2 [(A, A), (D, D)] 2 B
3 [(D, D), (L, L)] 2 B
4 [(L, L), (O, O)] 2 B
答案 1 :(得分:1)
这是另一种方法-
import pandas as pd
import numpy as np
d = {'element' : pd.Series([[[('A', 'A'), ('B', 'B')],[('B', 'B'), ('C', 'C')]],[[('A', 'A'), ('D', 'D')],[('D', 'D'), ('L', 'L')],[('L', 'L'), ('O', 'O')]]]),
'Lanes' : pd.Series(['M','B']),
'Category' : pd.Series([1,2])}
# creates Dataframe.
df = pd.DataFrame(d)
# print the data.
print(df)
df1=df.element.apply(pd.Series)\
.merge(df, right_index = True, left_index = True)\
.drop(["element"], axis = 1) \
.melt(id_vars = ['Lanes', 'Category'], value_name = "element")\
.drop("variable", axis = 1)\
.dropna()\
.reset_index(drop=True)
print(df1)