2017-04-14 19 views
1

我有一個熊貓DataFrame與客戶ID和列相關的月份(1,2,3 ....) 我有一個列自上次購買以來的月數 我使用以下填寫相關月份列如何填充列取決於發現值?

dt.loc[dt.month == 1, '1'] = 1 
dt.loc[dt.month == 2, '2'] = 1 
dt.loc[dt.month == 3, '3'] = 1 

等,

我怎麼能填充以更好的方式,以避免產生12個財務報表的列?

回答

2

pd.get_dummies

pd.get_dummies(dt.month) 

考慮數據框dt

dt = pd.DataFrame(dict(
     month=np.random.randint(1, 13, (10)), 
     a=range(10) 
    )) 

    a month 
0 0  8 
1 1  3 
2 2  8 
3 3  11 
4 4  3 
5 5  4 
6 6  1 
7 7  5 
8 8  3 
9 9  11 

添加列這樣

dt.join(pd.get_dummies(dt.month)) 

    a month 1 3 4 5 8 11 
0 0  8 0 0 0 0 1 0 
1 1  3 0 1 0 0 0 0 
2 2  8 0 0 0 0 1 0 
3 3  11 0 0 0 0 0 1 
4 4  3 0 1 0 0 0 0 
5 5  4 0 0 1 0 0 0 
6 6  1 1 0 0 0 0 0 
7 7  5 0 0 0 1 0 0 
8 8  3 0 1 0 0 0 0 
9 9  11 0 0 0 0 0 1 

如果你想要的列名是字符串

dt.join(pd.get_dummies(dt.month).rename(columns='month {}'.format)) 

    a month month 1 month 3 month 4 month 5 month 8 month 11 
0 0  8  0  0  0  0  1   0 
1 1  3  0  1  0  0  0   0 
2 2  8  0  0  0  0  1   0 
3 3  11  0  0  0  0  0   1 
4 4  3  0  1  0  0  0   0 
5 5  4  0  0  1  0  0   0 
6 6  1  1  0  0  0  0   0 
7 7  5  0  0  0  1  0   0 
8 8  3  0  1  0  0  0   0 
9 9  11  0  0  0  0  0   1