2015-09-08 2 views
2

У меня есть файл CSV, и я пытаюсь решить свою проблему на Pandas. Я решил это с использованием чистого Python, но я не могу это сделать с Pandas.Создайте новый столбец данных на основе правил в Python Pandas

В моем файле CSV имеется 5 столбцов. Я хочу создать новое, используя данные одного из других. Содержимое столбца: [0,1,2,3,4,5]. Таким образом, на основе значения, я хочу сделать следующее:

if value == 0: 
    cost_new_column = 0 
elif value == 1: 
    cost_new_column = 1000 
elif value == 2: 
    cost_new_column = 2500 
... 

Делать это в чистом Python с использованием for и if проста. Как я могу это сделать в Пандах?

ответ

3

Я бы построить dict, как вы хотите map значения и вызвать map на колонке, например:

In [95]: 
df = pd.DataFrame({'a':np.random.randint(0, 6, 20)}) 
df 

Out[95]: 
    a 
0 5 
1 3 
2 3 
3 5 
4 5 
5 4 
6 0 
7 5 
8 1 
9 0 
10 5 
11 2 
12 4 
13 5 
14 2 
15 5 
16 0 
17 5 
18 4 
19 4 

In [96]:  
d = dict(zip(range(6), [0,1000,2500,4000,5000,8000])) 
d 

Out[96]: 
{0: 0, 1: 1000, 2: 2500, 3: 4000, 4: 5000, 5: 8000} 

In [98]:  
df['new_col'] = df['a'].map(d) 
df 

Out[98]: 
    a new_col 
0 5  8000 
1 3  4000 
2 3  4000 
3 5  8000 
4 5  8000 
5 4  5000 
6 0  0 
7 5  8000 
8 1  1000 
9 0  0 
10 5  8000 
11 2  2500 
12 4  5000 
13 5  8000 
14 2  2500 
15 5  8000 
16 0  0 
17 5  8000 
18 4  5000 
19 4  5000 
+0

Спасибо. Это работает. Все еще изучаю Pandas :) Я отвечу на ваш ответ через 9 минут из-за ограничения SE – Tasos

+0

Как вы это сделаете, если условия не были точными, но выглядели так: 'if value <-10',' if -10 <= value и значение <10' и 'если 10 <= значение'? – Kartik

+0

для этого я бы использовал 'pd.cut' или использовал несколько операторов' loc' или 'np.where' so' np.where (значение <-10, some_val, np.where ((value> = 10) & (значение <10), other_val, third_val) 'где' value' - некоторый столбец в df – EdChum

Смежные вопросы