最近在做天池的一个比赛,真是应了那句俗语‘一窍不得,少挣几百’。在寻找缺失值的时候看到了队友写的代码,感触颇多,想记录下来。
缺失值处理一直是影响模型效果的重要因素,听过好多前辈说过好的模型不如好的数据。
这次比赛是时间序列的比赛,为了尽可能达到数据的稳定。我们在分析了数据之后,决定对每个date的brand进行补充,补充的结果达到每一天都含有所有的brand。
ps:数据结构(dataframe)
1.首先这是我的:
for index in train.index: if(train.loc[index][‘brand‘] != (i+1)): if(train.loc[index][‘date‘] !=j): for m in range(5-i): num = num + 1 train.loc[num] = {‘date‘:train.loc[index][‘date‘], ‘day_of_week‘:train.loc[index][‘day_of_week‘], ‘brand‘:m+1, ‘cnt‘:med[m]} i = 0 else: for m in range(train.loc[index][‘brand‘]-i-1): num = num + 1 print(train.loc[num-1]) data_new = pd.DataFrame({‘date‘:train.loc[index][‘date‘], ‘day_of_week‘:train.loc[index][‘day_of_week‘], ‘brand‘: m+1+i, ‘cnt‘:med[m+i]}, columns=[‘date‘,‘day_of_week‘,‘brand‘,‘cnt‘]) i = train.loc[index][‘brand‘] i = (i + 1) % 5 j = train.loc[index][‘date‘]
我的想法是遍历dataframe,然后对不符合的数进行记录,插入到dataframe后,然后进行排序。具体就不多说了
2.这是队友的
trs = train[[‘date‘,‘day_of_week‘]].drop_duplicates() dt = trs[‘date‘].tolist() dw = trs[‘day_of_week‘].tolist() db = [] dts = [] dws = [] for i in range(len(dt)): for m in range(1,6): dts.append(dt[i]) db.append(m) dws.append(dw[i]) try_data = pd.DataFrame({‘date‘:dts,‘day_of_week‘:dws,‘brand‘:db}) comb = pd.merge(try_data,train,how=‘left‘,on=[‘date‘,‘day_of_week‘,‘brand‘])
队友的想法是生成两个dataframe,然后合并,缺失值自然为none。
还是要好好向他学习
good lock to us