2015-06-30 4 views
0

У меня есть простой фреймворк с pandas, тогда я переименую имена переменных в 'a' и 'b'.Назначение нового имени столбца и создание нового столбца условно в пандах теперь работает?

import pandas as pd 
import numpy as np 

df = pd.DataFrame({'Type':list('ABBC'), 'Set':list('ZZXY')}) 
df.columns = ['a', 'b'] 
print df 
df['color'] = np.where(df['b']=='Z', 'green', 'red') 
print df 

    a b 
0 Z A 
1 Z B 
2 X B 
3 Y C 
    a b color 
0 Z A red 
1 Z B red 
2 X B red 
3 Y C red 

Без df.columns переименованием линии, я получаю

import pandas as pd 
import numpy as np 

df = pd.DataFrame({'Type':list('ABBC'), 'Set':list('ZZXY')}) 
#df.columns = ['a', 'b'] 
#print df 
df['color'] = np.where(df['Set']=='Z', 'green', 'red') 
print df 

    Set Type color 
0 Z A green 
1 Z B green 
2 X B red 
3 Y C red 

я хочу, и следовало ожидать первого набора кода для получения «зеленого зеленый красный красный», но это не удалось, и я не» Знаю почему.

+0

'np.where (ДФ [ 'B'] == 'Z', 'зеленый', 'красный')' Если не будет ли 'np.where (df ​​['a'] == 'Z', 'green', 'red') '? –

+0

Хммм, похоже, он работает после переключения на «а», но я не понимаю, почему, не переписал ли я столбцу «Тип» в «а» и столбец «Установить» в «b»? Или «Задать» перейти до «Тип» из-за алфавитного порядка? – KubiK888

+0

столбец a имеет символы «X, Y, Z», тогда как b имеет «A, B C». Выполнение сравнения 'df ['b'] == 'Z'', конечно, всегда возвращает' False'. Я думаю, вы просто неправильно читаете колонку a с помощью b. :) –

ответ

1

Как указано в комментариях, проблема связана с тем, как вы переименовываете столбцы. Вы лучше переименовать, например, так:

df = df.rename(columns={'Set': 'a','Type': 'b'})