根据数据框中的其他值更改熊猫数据框的值

时间:2018-09-27 04:53:50

标签: python pandas dataframe

我正在学习机器学习,并生成了一个熊猫数据框,其中包含以下列Id Category Cost_price Sold。数据框的形状为(100000, 4)

目标变量是“已售”列(1=Sold, 0=not sold)。但是由于数据帧中的所有列都是非常随机的,因此没有机器学习算法能够获得足够好的精度。为了向数据框引入模式,我试图操纵Sold列中的某些值。

我想做的是将cost_price小于800的售出价格中的6000更改为1。但是我无法做到这一点。

我是机器学习和python的新手。请帮助我

预先感谢

3 个答案:

答案 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