Если вам нужно создать логическое значение, основанное только на одном значении ...
В зависимости от того, что вы пытаетесь сопоставить (что выглядит как только Id из вашего вопроса) Предполагая, что вас это не волнуетсопоставляя ваши Name
и Keyword
столбцы, затем используйте isin
, и что-то вроде приведенного ниже должно дать вам ваш логический флаг.
import pandas as pd
data = {'Id': [1, 2, 3, 1, 2, 3, 1, 2], 'Val': ['ABC', 'BCD', 'CDE', 'DEF', 'EFG', 'HIJ', 'IJK', 'JKL']}
data2 = {'Id': [1, 4, 7, 1, 2, 0, 1, 5], 'Val': ['ABC pld', 'BCD iod', 'CDE jkdf', 'DEF uyt', 'EFG erf', 'HIJ dfd', 'IJK mnb', 'JKL jkdf']}
df = pd.DataFrame(data)
df2 = pd.DataFrame(data2)
df['New_Bools'] = df['Id'].isin(df2['Id'])
print(df)
Outputs
Id Val Id_In_DF2
0 1 ABC True
1 2 BCD True
2 3 CDE False
3 1 DEF True
4 2 EFG True
5 3 HIJ False
6 1 IJK True
7 2 JKL True
Если вам нужно сопоставить несколько столбцов и значений ...
Если вам нужно сопоставить имена (ожидаемый результат), вам потребуется выполнить дополнительные манипуляции со строками, чтобы изолироватьфрукты в дф2.Продолжая использовать данные в моем примере, вы сможете изолировать свои фрукты, используя apply
, lambda
и split
в ваших строках.Индекс 0
даст вам свои плоды.
Наконец, затем вы можете использовать маску для сравнения данных между двумя кадрами и вывода логического значения.
# string manipulation for df2
df2['Name'] = df2['Val'].apply(lambda x: x.split(' ')[0])
# perform your eval like this:
df['New_Bools_Id_And_Name'] = ((df['Id'] == df2['Id']) & (df['Val'] == df2['Name']))
Какие выходы
Id Val New_Bools New_Bools_Id_And_Name
0 1 ABC True True
1 2 BCD True False
2 3 CDE False False
3 1 DEF True True
4 2 EFG True True
5 3 HIJ False False
6 1 IJK True True
7 2 JKL True False