Я изучаю компьютерное обучение и Id Category Cost_price Sold
pandas, содержащую следующие столбцы Id Category Cost_price Sold
. Форма кадра данных (100000, 4)
.
Здесь целевой переменной является столбец "Продано" (1=Sold, 0=not sold)
. Но ни один алгоритм машинного обучения не может получить достаточно хорошую точность, поскольку все столбцы в кадре данных очень случайны. Чтобы ввести шаблон для фрейма данных, я пытаюсь манипулировать некоторыми значениями в столбце "Продано".
То, что я хочу сделать, - это изменить 6000 проданных значений на 1, где cost_price меньше 800. Но я не могу этого сделать.
Я новичок в машинном обучении и питоне. пожалуйста, помогите мне
заранее спасибо
Использование:
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
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
Объяснение:
Первые значения индекса фильтра по условию с boolean indexing
:
print (df.index[df['cost_price'] < 800])
Int64Index([0, 1, 4, 5, 6, 7, 10, 11, 12, 13, 16, 17], dtype='int64')
Затем выберите случайные значения N с помощью numpy.random.choice
:
print (np.random.choice(df.index[df['cost_price'] < 800], 10, replace=False))
[16 1 7 13 17 12 10 6 5 11]
И последний установлен 1
по значениям индекса с помощью DataFrame.loc
.
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
Я предполагаю, что вы случайно выбрали эти 6000 строк.
idx = df.Sold[df.Cost_price < 800].tolist()
r = random.sample(idx, 6000)
df.Sold.loc[r] = 1