Python 如何对不同的列表进行热编码;“列”;到数据帧
我需要为建模准备数据,我想为列创建一个具有0-1值的数据框。我有一个不同列的列表,我想将其热编码到一个数据帧中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',
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”。通常情况下,该列表将包含更多具有更多操作的项目。它就是这样!我想这正是我所需要的,非常感谢:)就是这样!我想这正是我需要的,非常感谢:)