假设我们在下面有df_orig
,列B
包括不同长度的行列表。在B
中的每一行中,X
的值是唯一的。X
的每个唯一值可能出现在B
的每一行中,也可能不出现。我认为这个例子最能说明问题
import pandas as pd
df_orig = pd.DataFrame({
'A': ['a', 'b', 'c', 'd', 'e'],
'B': [
[{'X': 'abc'}],
[{'X': 'abc'}, {'X': 'dtf'}, {'X': 'kju'}],
[{'X': 'abc'}, {'X': 'dtf'}],
[{'X': 'abc'}, {'X': 'dtf'}, {'X': 'kju'}, {'X': 'etr'}],
[]
]
})
df_orig
A B
0 a [{'X': 'abc'}]
1 b [{'X': 'abc'}, {'X': 'dtf'}, {'X': 'kju'}]
2 c [{'X': 'abc'}, {'X': 'dtf'}]
3 d [{'X': 'abc'}, {'X': 'dtf'}, {'X': 'kju'}, {'X': 'etr'}]
4 e []
我想要的是“解包”B
,以便X
的每个唯一值都有自己的列,并使用0/1
编码指示该值(列名)是否存在于每一行中。所需的dataframe
,df_des
如下所示:
df_des
A abc dtf kju etr
0 a 1 0 0 0
1 b 1 1 1 0
2 c 1 1 0 0
3 d 1 1 1 1
4 e 0 0 0 0
您可以使用dataframe构造函数并返回每个单元格中的字典值,包括
applymap
、get_dummies
和join
:编辑: 要连接多个列,您可以^{} 出列
B
并按如下所示进行连接:另一种办法:
好了:
首先,将B列设置为列表,然后使用multilabelbinarizer对列表进行热编码
相关问题 更多 >
编程相关推荐