Pandas - условная проверка и назначение нескольких столбцов данных - PullRequest
0 голосов
/ 23 октября 2019

Как проверить, равны ли данные в столбце любым данным в другом столбце в другом фрейме данных?

Вот некоторые данные df_out1:

'LN'      'E'   'DATE'

SMITH     H     '4-2-2000'
HARPER    A     '2-9-2018'
JONES     NaN   '1-1-2000'

Вот некоторые данные ef_file_in:

'LN'     'E'   

PERRY     F
JONES     H
SMITH     B

Вот что я написал:

df_out1.loc[df_out1['E'].isnull() & df_out1['LN'] == ef_file_in['LN'], 'LN'] = 
ef_file_in['E']

Вот результат, который я искал: df_out1 data:

'LN'      'E'   'DATE'

SMITH     H     '4-2-2000'
HARPER    A     '2-9-2018'
JONES     H     '1-1-2000'

Но, похоже, он только проверяет, находится ли df_out1 ['LN'] == ef_file_in ['LN'] в той же строке, вместо проверки df_out1 ['LN'] == любой спотв ef_file_in ['LN'].

Ответы [ 2 ]

0 голосов
/ 23 октября 2019

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

df_out1.loc[(df_out1['E'].isnull()) & df_out1['LN'].isin(ef_file_in['LN']),  'LN'] = 
ef_file_in['E']
0 голосов
/ 23 октября 2019

Используйте метод .isin(), чтобы найти эти строки

df_out1.loc[df_out1['E'].isnull() & df_out1['LN'].isin(ef_file_in['LN'])]

Изменить: после просмотра ваших данных, я думаю, что я получаю то, что вы хотите

import pandas as pd
df_out1 = pd.DataFrame({'LN':['SMITH','JONES','HARPER'],
                     'E': ['H',np.nan,'F'],
                   'DATE':['4-2-2000', '2-9-2018', '1-1-2000']})

ef_file_in = pd.DataFrame({'LN':['PERRY','JONES','SMITH'],'E': ['F','H','B']})

# merge the two dataframes to get all in one
df_out1 = pd.merge(df_out1,ef_file_in,on='LN',how='left')

#       LN  E_x DATE    E_y
# 0 SMITH   H   4-2-2000    B
# 1 JONES   NaN 2-9-2018    H
# 2 HARPER  F   1-1-2000    NaN

# Now E has changed to E_x and you have a new column E_y form ef_file_in

# get a new column E = copy E_x except when null, then get E_y
df_out1['E'] = np.where(df_out1.E_x.isnull(),df_out1['E_y'],df_out1['E_x'])

# drop E_x and E_y, not useful now
df_out1.drop(columns=['E_x','E_y'],inplace=True)

# Notice that column E is not null anymore for LN=Jones
#   LN      DATE        E
# 0 SMITH   4-2-2000    B
# 1 JONES   2-9-2018    H
# 2 HARPER  1-1-2000    F 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...