Как условно отобразить только пустые строки столбца? - PullRequest
0 голосов
/ 18 сентября 2018

как я могу создать новый столбец данных, который отображается в словарь, но только для пустых строк, при этом сохраняя значения ссылочного столбца для непустых строк?Ниже я создал «новый столбец» путем сопоставления столбца «col1» с x, но я хочу сопоставить его с x только в том случае, если «столбец col2» пуст, а в противном случае использовать значение в столбце col.

import pandas as pd
x = {'three':'green','four':'purple','five':'orange'}
d = {'col1': ['three', 'four', 'five'], 'col2':['blue',"","red"]}
df = pd.DataFrame(data=d)
df['new col']=df['col1'].map(x)

фактическирезультат:

    col1  col2  new col
0   three blue   green
1   four         purple
2   five  red    orange

желаемый результат (новый столбец сохраняет значения 'blue' и 'red' в строках 0 и 2, но отображает строку 1 в x):

    col1  col2   new col
0   three  blue  blue
1   four         purple
2   five    red  red

Ответы [ 3 ]

0 голосов
/ 18 сентября 2018

Использование mask и fillna:

df.col2.mask(df.col2.eq('')).fillna(df.col1.map(x))

0      blue
1    purple
2       red
Name: col2, dtype: object

df.assign(newcol=df.col2.mask(df.col2.eq('')).fillna(df.col1.map(x)))

    col1  col2  newcol
0  three  blue    blue
1   four        purple
2   five   red     red

Опция на местеиспользование loc:

Этот параметр медленнее, чем np.where и mask, но наглядно демонстрирует, что мы делаем.

df['newcol'] = df.col2
df.loc[df.col2.eq(''), 'newcol'] = df.col1.map(x)
0 голосов
/ 19 сентября 2018

Использование pandas.DataFrame.apply ,

df['new col'] = df.apply(
    lambda row: x[row['col1']] if row['col2'] == '' else row['col2'], axis=1)
0 голосов
/ 18 сентября 2018

Использование np.where

df['newcol']=np.where(df.col2=='',df.col1.map(x),df.col2)
df
Out[607]: 
    col1  col2  newcol
0  three  blue    blue
1   four        purple
2   five   red     red
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...