gpt4 book ai didi

python - 一种热编码 - 将多列编码为一列

转载 作者:行者123 更新时间:2023-11-28 17:09:29 30 4
gpt4 key购买 nike

我想对具有多个相同“类型”列的数据帧进行编码,例如:

import pandas as pd

df = pd.DataFrame(data=[["France", "Bupapest", "Sweden", "Paris"], ["Italy", "Frankfurt", "France", "Naples"]], columns=["Countries 1", "Cities 1", "Countries 2", "Cities 2"])
print(df)

输出:

  Countries 1   Cities 1 Countries 2 Cities 2
0 France Bupapest Sweden Paris
1 Italy Frankfurt France Naples

如何通过传入应视为一个的列索引来使用一种热编码对该数据帧进行编码?在这个例子中,我将传入 [0, 2] 和 [1, 3],因为国家 1 和国家 2 列有 3 个不同的国家组合,因此应该有 3 个类别,而不是每个类别 2,同样的原则适用于这两个国家列。

最佳答案

我正在使用 wide_to_long 展平 df ,然后使用 factorize+unstack

s=pd.wide_to_long(df.reset_index(),stubnames=['Countries','Cities'],i='index',j='unstack',sep=' ').apply(lambda x : pd.factorize(x)[0]+1).unstack()

s.columns=s.columns.map('{0[0]} {0[1]}'.format)

s=s.reindex(columns=df.columns)
s
Out[1377]:
Countries 1 Cities 1 Countries 2 Cities 2
index
0 1 1 3 3
1 2 2 1 4

或者get_dummies

s=pd.get_dummies(pd.wide_to_long(df.reset_index(),stubnames=['Countries','Cities'],i='index',j='unstack',sep=' '))

s
Out[1392]:
Countries_France Countries_Italy Countries_Sweden \
index unstack
0 1 1 0 0
1 1 0 1 0
0 2 0 0 1
1 2 1 0 0
Cities_Bupapest Cities_Frankfurt Cities_Naples Cities_Paris
index unstack
0 1 1 0 0 0
1 1 0 1 0 0
0 2 0 0 0 1
1 2 0 0 1 0

关于python - 一种热编码 - 将多列编码为一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48669165/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com