2015-12-04 3 views

ответ

1

Вы также можете использовать map:

In [3]: 
df['col2'] = df['col1'].map(other_dict) 
df 

Out[3]: 
    col1 col2 
0 A  1 
1 B  0 
2 B  0 
3 A  1 
+0

Интересно, что для карты не требуется '.get', любая идея, почему это так? –

+0

Я понимаю, что это просто использует ключи для выполнения поиска, так же, как если бы вы проходили «Серию», и аналогичным образом он будет обрабатывать и генерировать «KeyError», если метка/ключ не существует, apply (lambda x: other_dict.get (x, other_val)) 'по крайней мере не умрет, если ключ не существует. – EdChum

1

Одним из вариантов является использование применяются:

In [11]: df["col1"].apply(other_dict.get) 
Out[11]: 
0 1 
1 0 
2 0 
3 1 
Name: col1, dtype: int64 

затем присвоить его колонке:

df["col2"] = df["col1"].apply(other_dict.get) 

Другой, который может быть более эффективным (если у вас есть большие группы) заключается в использовании преобразования:

In [21]: g = df.groupby("col1") 

In [22]: g["col1"].transform(lambda x: other_dict[x.name]) 
Out[22]: 
0 1 
1 0 
2 0 
3 1 
Name: col1, dtype: object 

Стоит также ссылки на categorical section of the docs.

+0

Но что производит серии, не dataframe. –

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