2015-07-20 5 views
31

У меня есть простой DataFrame вроде следующего:Панды DataFrame: заменить все значения в столбце, основываясь на состоянии

Pandas DataFrame

Я хочу, чтобы выбрать все значения из столбца «Первый сезон» и заменить тех, которые превышают 1990 год на 1. В этом примере только Балтиморские вороны заменили бы в 1996 году на 1 (сохраняя остальную часть данных без изменений).

Я использовал следующие:

df.loc[(df['First Season'] > 1990)] = 1 

Но, он заменяет все значения в этой строке на 1, а не только значения в столбце «Первый сезон».

Как заменить только значения из этого столбца?

ответ

55

Вы должны выбрать этот столбец:

In [41]: 
df.loc[df['First Season'] > 1990, 'First Season'] = 1 
df 

Out[41]: 
       Team First Season Total Games 
0  Dallas Cowboys   1960   894 
1  Chicago Bears   1920   1357 
2 Green Bay Packers   1921   1339 
3  Miami Dolphins   1966   792 
4 Baltimore Ravens    1   326 
5 San Franciso 49ers   1950   1003 

Так Синтаксис здесь:

df.loc[<mask>(here mask is generating the labels to index) , <optional column(s)> ] 

Вы можете проверить docs, а также 10 minutes to pandas, который показывает семантику

EDIT

Если вы хотите создать булев индикатор, то вы можете просто использовать логическое условие для создания булева Series и бросили DTYPE в int это будет конвертировать True и False к 1 и 0 соответственно:

In [43]: 
df['First Season'] = (df['First Season'] > 1990).astype(int) 
df 

Out[43]: 
       Team First Season Total Games 
0  Dallas Cowboys    0   894 
1  Chicago Bears    0   1357 
2 Green Bay Packers    0   1339 
3  Miami Dolphins    0   792 
4 Baltimore Ravens    1   326 
5 San Franciso 49ers    0   1003 
+0

работал отлично! Невозможно ли наложить несколько преобразований? 'df.loc [df ['First Season']> 1990, 'First Season'] = 1 df.loc [df ['First Season'] <1990, 'First Season'] = 0' делает все значения в этот столбец возвращает 0 – ichimok

+0

Вы можете использовать трюк 'df ['First Season'] = (df ['First Season']> 1990) .astype (int)' this создает булевскую серию и кастинг для int преобразует 'True' и 'False' на' 1' и '0' соответственно – EdChum

+0

astype (int) больше Pandorable! Хороший ответ. – mythicalcoder

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