2013-09-22 3 views
42

У меня есть dataframe в панде, например:Добавить новый столбец в панде DataFrame Python

Col1 Col2 
A  1 
B  2 
C  3 

Теперь, если я хотел бы добавить еще один столбец с именем Col3 и значение основано на Col2. В формуле, если Col2> 1, то Col3 равно 0, иначе будет 1. Итак, в приведенном выше примере. Выходной сигнал будет следующим:

Col1 Col2 Col3 
A 1 1 
B 2 0 
C 3 0 

Любая идея о том, как этого достичь?

+1

возможный дубликат O f [Добавление нового столбца в существующий DataFrame в python pandas] (http://stackoverflow.com/questions/12555323/adding-new-column-to-existing-dataframe-in-python-pandas) –

ответ

57

Вы просто делаете противоположное сравнение. if Col2 <= 1. Это приведет к возврату булевой серии с значениями False для значений, превышающих 1 и True значений для другого. Если преобразовать его в int64 DTYPE, True становится 1 и False стать 0,

df['Col3'] = (df['Col2'] <= 1).astype(int) 

Если вы хотите получить более общее решение, в котором можно назначить любое количество к Col3 в зависимости от значения из Col2 вы должны сделать что-то вроде:

df['Col3'] = df['Col2'].map(lambda x: 42 if x > 1 else 55) 

Или:

df['Col3'] = 0 
condition = df['Col2'] > 1 
df.loc[condition, 'Col3'] = 42 
df.loc[~condition, 'Col3'] = 55 
+0

Awesome. Большое вам спасибо за ваш совет. Я пробовал это, и он работает! –

+0

Могу ли я использовать df ['col4'] = df ['col2', 'col1']. Map (lambda x: 20 if x> 1 elif x> 10 x: 40 else 100) – Payne

+0

@Payne, нет, это wouldn 't работа, только для точного одного столбца – VMAtm

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