我正在学习机器学习,并生成了一个熊猫数据框,其中包含以下列Id Category Cost_price Sold
。数据框的形状为(100000, 4)
。
目标变量是“已售”列(1=Sold, 0=not sold)
。但是由于数据帧中的所有列都是非常随机的,因此没有机器学习算法能够获得足够好的精度。为了向数据框引入模式,我试图操纵Sold列中的某些值。
我想做的是将cost_price小于800的售出价格中的6000更改为1。但是我无法做到这一点。
我是机器学习和python的新手。请帮助我
预先感谢
答案 0 :(得分:2)
使用:
set @fromdate = (select DATEADD(month, -6, @Yourdate))
set @todate = @Yourdate
示例:
df.loc[np.random.choice(df.index[df['cost_price'] < 800], 6000, replace=False), 'Sold'] = 1
df = pd.DataFrame({
'Sold':[1,0,0,1,1,0] * 3,
'cost_price':[500,300,6000,900,100,400] * 3,
})
print (df)
Sold cost_price
0 1 500
1 0 300
2 0 6000
3 1 900
4 1 100
5 0 400
6 1 500
7 0 300
8 0 6000
9 1 900
10 1 100
11 0 400
12 1 500
13 0 300
14 0 6000
15 1 900
16 1 100
17 0 400
说明:
首先使用boolean indexing
的条件过滤索引值:
df.loc[np.random.choice(df.index[df['cost_price'] < 800], 10, replace=False), 'Sold'] = 1
print (df)
Sold cost_price
0 1 500
1 1 300
2 0 6000
3 1 900
4 1 100
5 1 400
6 1 500
7 1 300
8 0 6000
9 1 900
10 1 100
11 1 400
12 1 500
13 1 300
14 0 6000
15 1 900
16 1 100
17 1 400
然后通过numpy.random.choice
选择N个随机值:
print (df.index[df['cost_price'] < 800])
Int64Index([0, 1, 4, 5, 6, 7, 10, 11, 12, 13, 16, 17], dtype='int64')
最后通过DataFrame.loc
的索引值设置print (np.random.choice(df.index[df['cost_price'] < 800], 10, replace=False))
[16 1 7 13 17 12 10 6 5 11]
。
答案 1 :(得分:1)
IIUC使用DataFrame.at
df.at[df.Sold[df.cost_price < 800][:6000].index, 'Sold'] = 1
如果您随机选择行,请使用.sample
df.at[df[df.cost_price < 800].sample(6000).index, 'Sold'] = 1
答案 2 :(得分:0)
我假设您将随机选择这6000行。
idx = df.Sold[df.Cost_price < 800].tolist()
r = random.sample(idx, 6000)
df.Sold.loc[r] = 1