Проверьте, существует ли значение из одного кадра данных в другом кадре данных - PullRequest
0 голосов
/ 21 мая 2018

У меня есть 2 кадра данных.

Df1 = pd.DataFrame({'name': ['Marc', 'Jake', 'Sam', 'Brad']
Df2 = pd.DataFrame({'IDs': ['Jake', 'John', 'Marc', 'Tony', 'Bob']

Я хочу перебрать каждую строку в Df1['name'] и проверить, находится ли каждое имя где-то в Df2['IDs'].

Результат должен возвращаться1, если имя там, 0, если оно не так:

Marc  1 
Jake  1
Sam   0 
Brad  0

Спасибо.

Ответы [ 4 ]

0 голосов
/ 21 мая 2018

Используя merge

s=Df1.merge(Df2,left_on='name',right_on='IDs',how='left')
s.IDs=s.IDs.notnull().astype(int)
s
Out[68]: 
   name  IDs
0  Marc    1
1  Jake    1
2   Sam    0
3  Brad    0
0 голосов
/ 21 мая 2018

Это один из способов.Преобразовать в набор для поиска O (1) и использовать astype(int) для представления логических значений в виде целых чисел.

values = set(Df2['IDs'])

Df1['Match'] = Df1['name'].isin(values).astype(int)
0 голосов
/ 21 мая 2018

Это должно сделать это:

Df1 = Df1.assign(result=Df1['name'].isin(Df2['IDs']).astype(int))
0 голосов
/ 21 мая 2018

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

Df1.name.isin(Df2.IDs).astype(int)

0    1
1    1
2    0
3    0
Name: name, dtype: int32

Показать результат в кадре данных

Df1.assign(InDf2=Df1.name.isin(Df2.IDs).astype(int))

   name  InDf2
0  Marc      1
1  Jake      1
2   Sam      0
3  Brad      0

В объекте Series

pd.Series(Df1.name.isin(Df2.IDs).values.astype(int), Df1.name.values)

Marc    1
Jake    1
Sam     0
Brad    0
dtype: int32
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...