给出一个表
,这是我想到的问题 Id type
0 1 [a,b]
1 2 [c]
2 3 [a,d]
我想将其转换为以下形式:
Id a b c d
0 1 1 1 0 0
1 2 0 0 1 0
2 3 1 0 0 1
我需要一种非常有效的方法来转换大表。任何评论都是受欢迎的。
====================================
我收到了好几个答案,非常感谢你的帮助。
现在出现了一个新问题,即我的笔记本电脑内存不足以使用pd.dummies
生成整个数据帧。
无论如何都要逐行生成稀疏向量,然后堆叠在一起?
答案 0 :(得分:1)
试试这个:
pd.get_dummies(df.type.apply(lambda x: pd.Series([i for i in x])))
解释:
df.type.apply(lambda x: pd.Series([i for i in x]
为您提供列表中索引位置的列。然后,您可以使用get dummies
来获取每个值的计数
pd.get_dummies(df.type.apply(lambda x: pd.Series([i for i in x])))
输出:
a c b d
0 1 0 1 0
1 0 1 0 0
2 1 0 0 1
答案 1 :(得分:1)
试试这个
>>> df
Id type
0 1 [a, b]
1 2 [c]
2 3 [a, d]
>>> df2 = pd.DataFrame([x for x in df['type'].apply(
... lambda item: dict(map(
... lambda x: (x,1),
... item))
... ).values]).fillna(0)
>>> df2.join(df)
a b c d Id type
0 1 1 0 0 1 [a, b]
1 0 0 1 0 2 [c]
2 1 0 0 1 3 [a, d]
它基本上将列表列表转换为dict列表,并从此
构造一个DataFrame[['a','b'],['c'],['a','d']]#清单列表
中创建DataFrame
[{'a':1,'b':1},{'c':1},{'a':1,'d':1}] #dict of dict 从这个