我有一个这样的多索引数据框
bill
City Month
3 01 14586
02 14316
03 17261
04 16642
05 14977
06 14237
07 14486
08 14216
09 17461
10 16742
11 14677
12 14637
4 01 24586
02 24316
03 27261
04 26642
05 24977
06 24337
07 24486
08 24216
09 27461
10 26742
11 24677
12 24637
我从这行代码中得到
df = df.groupby(['City', 'Month']).sum()
我想对Month
索引进行一次热编码,并将其转换为12列,以便具有这样的数据帧
City M1 M2 M3 ... M12 bill
3 1 0 0 0 46
3 0 1 0 0 64
3 0 0 1 0 386
...
4 1 0 0 0 546
4 0 1 0 0 686
...
数字不匹配,但我认为想法很明确。我的目标是bill
和
Month
是ML模型的功能
答案 0 :(得分:3)
首先通过DataFrame.reset_index
将MultiIndex
转换为列,然后使用get_dummies
,最后使用bill
将最后一列DataFrame.pop
重新分配为列:
df = df.reset_index()
df = pd.get_dummies(df, columns=['Month'], prefix='M', prefix_sep='')
df['bill'] = df.pop('bill')
print (df)
City M01 M02 M03 M04 M05 M06 bill
0 3 1 0 0 0 0 0 14586
1 3 0 1 0 0 0 0 14316
2 3 0 0 1 0 0 0 17261
3 3 0 0 0 1 0 0 16642
4 3 0 0 0 0 1 0 14977
5 3 0 0 0 0 0 1 14337