我有一个列表列表(包含元组):
mylist = [[0, ('a',3), ('b',4), ('c',5)], [1, ('a',2), ('d',7), ('e',6)], [2, ('b',1), ('a',2), ('d',3)]]
我想将其转换为长数据框。我的预期输出:
v1 v2 v3
0 a 3
0 b 4
0 c 5
1 a 2
1 d 7
1 e 6
2 b 1
2 a 2
2 d 3
感谢您的时间和帮助!
答案 0 :(得分:5)
您可以使用list comprehension
和tuple unpacking
进行尝试。
# (0, 'a', 3)
# |
pd.DataFrame([(i,*t) for i,*v in mylist for t in v])
# In 1st iteration | | |
# 0 | ('a', 3)
# [('a', 3), ('b', 4), ('c', 5)]
0 1 2
0 0 a 3
1 0 b 4
2 0 c 5
3 1 a 2
4 1 d 7
5 1 e 6
6 2 b 1
7 2 a 2
8 2 d 3
答案 1 :(得分:2)
这是将元组填充到第一项的一种方法:
s = [(x[0],)+ y for x in mylist for y in x[1:]]
print (pd.DataFrame(s, columns=["v1","v2","v3"]))
v1 v2 v3
0 0 a 3
1 0 b 4
2 0 c 5
3 1 a 2
4 1 d 7
5 1 e 6
6 2 b 1
7 2 a 2
8 2 d 3
答案 2 :(得分:1)
newmylist = []
for i in mylist:
for j in i[1:]:
newmylist.append((i[0],) + j)
pd.DataFrame(newmylist, columns=["v1","v2","v3"])
输出:
v1 v2 v3
0 0 a 3
1 0 b 4
2 0 c 5
3 1 a 2
4 1 d 7
5 1 e 6
6 2 b 1
7 2 a 2
8 2 d 3