2017-01-11 3 views
0

У меня 2 dataframes:В панд, используя ISIN, чтобы соответствовать dataframe к другому dataframe

local_PC_user_filer_OpCode_sum:

client_op clienthostid eventSum feeling usersidid 
0  5030    1   1 Happy  5 
1  5030    1   2 Mad   5 
2  5030    1   8 Sick   6 
3  5030    3   9 GoingCrazy  8 

df_old_enough_users:

client_op clienthostid eventSum filerid timestamp usersidid 
0 5030    1    1   1  1/11/2015 5 

Теперь, что я пытаюсь сделать следует взять все строки из local_PC_user_filer_OpCode_sum, которые имеют соответствие [['usersidid', 'clienthostid']] с df_old_enough_use RS, так что я бы ожидать, чтобы найти это:

 client_op clienthostid eventSum feeling  usersidid 
0  5030    1   1  Happy   5 

Я пытаюсь сделать это с ISIN:

local_PC_user_filer_OpCode_sum[local_PC_user_filer_OpCode_sum.clienthostid.isin(df_old_enough_users.loc[:,['usersidid','clienthostid']])].reset_index(drop=True) 

Но я получаю пустой dataframe :( Что я делаю не так и есть ли (лучший) способ сделать то, что мне нужно?

Спасибо,

ответ

2

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

cols = ['usersidid', 'clienthostid'] 
a = local_PC_user_filer_OpCode_sum.set_index(cols) 
print (df_old_enough_users.join(a, on=cols, lsuffix='_x')[local_PC_user_filer_OpCode_sum.columns].reset_index(drop=True)) 

    client_op clienthostid eventSum filerid feeling usersidid 
0  5030    1   1  1 Happy   5 
1  5030    1   2  1  Mad   5 

isin решение не работает, потому что columns и index соответствия необходимо также и в DataFrames.

+0

Да, но он объединит dataframes, мне нужны только строки из local_PC_user_filer_OpCode_sum, которые имеют соответствие с df_old_enough_users on = ['usersidid', 'clienthostid'] –

1

Если вы заинтересованы в изменении ответа @ jezrael, это может дать вам более чистый ответ.

df = pd.merge(local_PC_user_filer_OpCode_sum, 
       df_old_enough_users[['usersidid','clienthostid']], 
       on=['usersidid','clienthostid'], 
       how="right")["client_op", "clienthostid", "eventSum", "filerid", "timestamp", "usersidid"] 

ДФ будет иметь точные столбцы из исходного local_PC_user_filer_OpCode_sum dataframe, а строки, возвращаемые будет только на правой таблице, которую вы использовали в качестве фильтра.

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