Python 如何对不同的列表进行热编码;“列”;到数据帧

Python 如何对不同的列表进行热编码;“列”;到数据帧,python,pandas,machine-learning,Python,Pandas,Machine Learning,我需要为建模准备数据,我想为列创建一个具有0-1值的数据框。我有一个不同列的列表,我想将其热编码到一个数据帧中 List = [['DRT', 'AFV'], ['CLN', 'DRT', 'AFV'], ['CLN', 'DRT', 'AFV'], ['BLN', 'PCK', 'CAL', 'WBL', 'BCO', 'UPG', 'CLN', 'DRT'], ['BLN', 'AFV', 'CAL', 'WBL', 'UPG', 'CLN', 'DRT'], ['COA', 'BLN',

我需要为建模准备数据,我想为列创建一个具有0-1值的数据框。我有一个不同列的列表,我想将其热编码到一个数据帧中

List = [['DRT', 'AFV'], ['CLN', 'DRT', 'AFV'], ['CLN', 'DRT', 'AFV'], ['BLN', 'PCK', 'CAL', 'WBL', 'BCO', 'UPG', 'CLN', 'DRT'], ['BLN', 'AFV', 'CAL', 'WBL', 'UPG', 'CLN', 'DRT'], ['COA', 'BLN', 'PCK', 'CAL', 'WBL', 'UPG', 'CLN', 'DRT'], ['COA', 'BLN', 'PCK', 'CAL', 'WBL', 'UPG', 'CLN', 'DRT']]
我想要一个如下所示的数据框,列表中的项目有1个值,不在列表中的项目有0个值,然后列表中的每个列表有不同的行。列表中总共有28个不同的值

[![df][1]][1]

我尝试了“get_dummies”,但这会创建不同的列,如1_DRT。。。7_DRT,因为DRT在数据帧中的位置不同。还尝试使用Scikitlearn的一些函数,但没有成功。我真的很感激你能帮我做这件事

编辑:具有0-1值的最终数据帧的列-->

列=['CLN'、'AFV'、'DRT'、'CAL'、'WBL'、'BLN'、'UPG'、'BCO'、'PCK', ‘COA’、‘WPK’、‘WCO’、‘1CL’、‘DRY’、‘RES’、‘WFR’、‘FRZ’、‘REC’, ‘CHF’、‘STP’、‘DFR’、‘HOT’、‘EXT’、‘PIL’、‘SPL’、‘INS’、‘SVT’, “UVP”]
[1] :

您可以为
列表和
创建一个熊猫系列。将列表分解成不同的行,然后使用
.str.get_dummies()
获取每个分解行的虚拟表。按
.max(level=0)
聚合原始列表的行:

结果:

print(df)

   AFV  BCO  BLN  CAL  CLN  COA  DRT  PCK  UPG  WBL
0    1    0    0    0    0    0    1    0    0    0
1    1    0    0    0    1    0    1    0    0    0
2    1    0    0    0    1    0    1    0    0    0
3    0    1    1    1    1    0    1    1    1    1
4    1    0    1    1    1    0    1    0    1    1
5    0    0    1    1    1    1    1    1    1    1
6    0    0    1    1    1    1    1    1    1    1


您可以为
List
.explode()
创建熊猫系列,将列表分解为不同的行,然后使用
.str.get_dummies()
为每个分解行获取虚拟表。按
.max(level=0)
聚合原始列表的行:

结果:

print(df)

   AFV  BCO  BLN  CAL  CLN  COA  DRT  PCK  UPG  WBL
0    1    0    0    0    0    0    1    0    0    0
1    1    0    0    0    1    0    1    0    0    0
2    1    0    0    0    1    0    1    0    0    0
3    0    1    1    1    1    0    1    1    1    1
4    1    0    1    1    1    0    1    0    1    1
5    0    0    1    1    1    1    1    1    1    1
6    0    0    1    1    1    1    1    1    1    1


每个嵌套列表意味着什么?例如,您有多个CLN记录。您希望在输出的CLN列中找到什么?列表中的列表表示对某个对象执行的不同操作。对于每个列表,我想创建一行,为对象上完成的操作提供1个值,为未完成的操作提供0个值。因此,第一个对象经历了“DRT”、“AFV”而不是其他26个操作,我希望数据帧中的一行仅为这两个操作提供1值。我想补充一点,理想情况下,我希望输出为28列数据帧,目标标签为“AFV”和“PCK”。通常情况下,列表将包含更多具有更多操作的项。每个嵌套列表意味着什么?例如,您有多个CLN记录。您希望在输出的CLN列中找到什么?列表中的列表表示对某个对象执行的不同操作。对于每个列表,我想创建一行,为对象上完成的操作提供1个值,为未完成的操作提供0个值。因此,第一个对象经历了“DRT”、“AFV”而不是其他26个操作,我希望数据帧中的一行仅为这两个操作提供1值。我想补充一点,理想情况下,我希望输出为28列数据帧,目标标签为“AFV”和“PCK”。通常情况下,该列表将包含更多具有更多操作的项目。它就是这样!我想这正是我所需要的,非常感谢:)就是这样!我想这正是我需要的,非常感谢:)