假设我有一个像下面这样的列表:
L =[
[11, ['Blue','Green','Yellow'] , 1],
[21, ['White','Green','Brown'] , 0],
[31, ['Orange','Yellow'] , 0],
[41, ['White','Orange','Brown'], 1],
] ^ ^^^ ^
Id Colors vote
如何将此列表转换为颜色为列的DataFrame。
Id Blue Green Yellow White Brown Orange vote
0 11 1 1 1 0 0 0 1
1 21 0 1 0 1 1 0 0
2 31 0 0 1 0 0 1 0
3 41 0 0 0 1 1 1 1
这里,df [Id] [color]表示Id中是否存在颜色。
我想,我可以用迭代的方式做到这一点。有没有最简单的方法。
答案 0 :(得分:1)
这是一个(迭代方式)来做,不知道如何进行矢量化。
from itertools import chain
import pandas as pd
L = [
[11, ['Blue','Green','Yellow'] , 1],
[21, ['White','Green','Brown'] , 0],
[31, ['Orange','Yellow'] , 0],
[41, ['White','Orange','Brown'], 1],
]
colors = set(chain(*(row[1] for row in L)))
def row2obj(row):
obj = {c: int(c in row[1]) for c in colors}
obj['id'] = row[0]
obj['vote'] = row[2]
return obj
df = pd.DataFrame.from_records(row2obj(row) for row in L)