2016-08-30 2 views
2

Этот вопрос является расширением Pandas conditional creation of a series/dataframe column. Если бы мы имели эту dataframe:Pandas условное создание новой колонки данных данных

Col1  Col2 
1 A   Z 
2 B   Z   
3 B   X 
4 C   Y 
5 C   W 

и мы хотели бы сделать эквивалент:

if Col2 in ('Z','X') then Col3 = 'J' 
else if Col2 = 'Y' then Col3 = 'K' 
else Col3 = {value of Col1} 

Как я могу это сделать?

ответ

3

Вы можете использовать loc с isin и последней fillna:

df.loc[df.Col2.isin(['Z','X']), 'Col3'] = 'J' 
df.loc[df.Col2 == 'Y', 'Col3'] = 'K' 
df['Col3'] = df.Col3.fillna(df.Col1) 
print (df) 
    Col1 Col2 Col3 
1 A Z J 
2 B Z J 
3 B X J 
4 C Y K 
5 C W C 
+0

Если мой или другой ответ был полезным, не забывайте [принимать] (http://meta.stackexchange.com/a/5235/295067). Благодарю. – jezrael

0

Попробуйте использовать np.where: outcome = np.where(condition, true, false)

df["Col3"] = np.where(df['Col2'].isin(['Z','X']), "J", np.where(df['Col2'].isin(['Y']), 'K', df['Col1'])) 

    Col1 Col2 Col3 
1 A Z J 
2 B Z J 
3 B X J 
4 C Y K 
5 C W C 
Смежные вопросы