Pandas 具有确定性顺序的单热编码
Pandas One-Hot-Encoding with deterministic order
假设我在 DataFrame 中有一个分类列(例如工作日)。我想将它编码为单热编码。
我正在使用 pandas.get_dummies()
来执行此操作。但我看不出如何使订单确定的方法。例如,我有这两个数据框
df1 = pd.DataFrame({'visitors':[220, 240, 180, 210, 220, 260, 270], 'weekday': ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']})
df2 = pd.DataFrame({'visitors':[240, 180, 210, 220, 260, 270, 220], 'weekday': ['Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun', 'Mon']})
如果我对两者都调用 get_dummies()
,我会得到两种不同的编码。我可以看到,因为顺序不同。但是有没有办法,无论值是如何进来的,我如何才能让任何 DataFrame 具有相同的编码?例如:Mon=1000000
、Tue=0100000
、等等?
pd.get_dummies(df1['weekday'])
pd.get_dummies(df2['weekday'])
get_dummies
的行为是一致的。
您看到差异是因为 visitors
的位置发生了变化。
print(df1)
print(pd.get_dummies(df1['weekday']))
print()
print(df2)
print(pd.get_dummies(df2['weekday']))
这是输出:
visitors weekday
0 220 Mon
1 240 Tue
2 180 Wed
3 210 Thu
4 220 Fri
5 260 Sat
6 270 Sun
Fri Mon Sat Sun Thu Tue Wed
0 0 1 0 0 0 0 0
1 0 0 0 0 0 1 0
2 0 0 0 0 0 0 1
3 0 0 0 0 1 0 0
4 1 0 0 0 0 0 0
5 0 0 1 0 0 0 0
6 0 0 0 1 0 0 0
visitors weekday
0 240 Tue
1 180 Wed
2 210 Thu
3 220 Fri
4 260 Sat
5 270 Sun
6 220 Mon
Fri Mon Sat Sun Thu Tue Wed
0 0 0 0 0 0 1 0
1 0 0 0 0 0 0 1
2 0 0 0 0 1 0 0
3 1 0 0 0 0 0 0
4 0 0 1 0 0 0 0
5 0 0 0 1 0 0 0
6 0 1 0 0 0 0 0
假设我在 DataFrame 中有一个分类列(例如工作日)。我想将它编码为单热编码。
我正在使用 pandas.get_dummies()
来执行此操作。但我看不出如何使订单确定的方法。例如,我有这两个数据框
df1 = pd.DataFrame({'visitors':[220, 240, 180, 210, 220, 260, 270], 'weekday': ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']})
df2 = pd.DataFrame({'visitors':[240, 180, 210, 220, 260, 270, 220], 'weekday': ['Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun', 'Mon']})
如果我对两者都调用 get_dummies()
,我会得到两种不同的编码。我可以看到,因为顺序不同。但是有没有办法,无论值是如何进来的,我如何才能让任何 DataFrame 具有相同的编码?例如:Mon=1000000
、Tue=0100000
、等等?
pd.get_dummies(df1['weekday'])
pd.get_dummies(df2['weekday'])
get_dummies
的行为是一致的。
您看到差异是因为 visitors
的位置发生了变化。
print(df1)
print(pd.get_dummies(df1['weekday']))
print()
print(df2)
print(pd.get_dummies(df2['weekday']))
这是输出:
visitors weekday
0 220 Mon
1 240 Tue
2 180 Wed
3 210 Thu
4 220 Fri
5 260 Sat
6 270 Sun
Fri Mon Sat Sun Thu Tue Wed
0 0 1 0 0 0 0 0
1 0 0 0 0 0 1 0
2 0 0 0 0 0 0 1
3 0 0 0 0 1 0 0
4 1 0 0 0 0 0 0
5 0 0 1 0 0 0 0
6 0 0 0 1 0 0 0
visitors weekday
0 240 Tue
1 180 Wed
2 210 Thu
3 220 Fri
4 260 Sat
5 270 Sun
6 220 Mon
Fri Mon Sat Sun Thu Tue Wed
0 0 0 0 0 0 1 0
1 0 0 0 0 0 0 1
2 0 0 0 0 1 0 0
3 1 0 0 0 0 0 0
4 0 0 1 0 0 0 0
5 0 0 0 1 0 0 0
6 0 1 0 0 0 0 0