Изменение значений кадра данных Pandas на основе других значений в кадре данных

1

Я изучаю компьютерное обучение и Id Category Cost_price Sold pandas, содержащую следующие столбцы Id Category Cost_price Sold. Форма кадра данных (100000, 4).

Здесь целевой переменной является столбец "Продано" (1=Sold, 0=not sold). Но ни один алгоритм машинного обучения не может получить достаточно хорошую точность, поскольку все столбцы в кадре данных очень случайны. Чтобы ввести шаблон для фрейма данных, я пытаюсь манипулировать некоторыми значениями в столбце "Продано".

То, что я хочу сделать, - это изменить 6000 проданных значений на 1, где cost_price меньше 800. Но я не могу этого сделать.

Я новичок в машинном обучении и питоне. пожалуйста, помогите мне

заранее спасибо

Теги:
pandas
dataframe

3 ответа

2
Лучший ответ

Использование:

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.

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
0

Я предполагаю, что вы случайно выбрали эти 6000 строк.

idx = df.Sold[df.Cost_price < 800].tolist()
r = random.sample(idx, 6000)
df.Sold.loc[r] = 1
  • 0
    Это изменяет все значения Sold, где cost_price <800, на 1. Я хочу изменить только 6000 значений в столбце проданных, где cost_price <800. В настоящее время в столбце проданных, где cost_price <800, имеется около 15000 значений.
  • 0
    Хорошо, тогда я буду редактировать

Ещё вопросы

Сообщество Overcoder
Наверх
Меню