Python: вернуть всю строку, когда два фрейма данных имеют общее значение в двух разных столбцах

avatar
Joehat
1 июля 2021 в 19:00
39
1
1

Я хотел бы напечатать всю строку, когда два разных фрейма данных имеют общее значение в двух разных столбцах. Я могу идентифицировать их, но вместо того, чтобы возвращать всю строку, я мог только выяснить, как вернуть логическое значение, как показано ниже:

df1 = pd.DataFrame(np.array([[1, 2, 1], 
                             [4, 55, 6], 
                             [1, 8, 88]]),
                   columns=['col1', 'col2', 'col3'])
df1

>>
col1    col2    col3
0   1   2        1
1   4   55       6
2   1   8        88


df2 = pd.DataFrame(np.array([[333, 1, 2], 
                             [55, 8, 88], 
                             [8, 5, 6]]),
                   columns=['col1', 'col2', 'col3'])
df2

>>
    col1    col2    col3
0   333        1    2
1   55         8    88
2   8          5    6


# Return row where df1["col2"] and df2["col1"] have the same values
# the output should print the rows of index 1 and 2

df1['col2'].isin(df2['col1'])

>>
0    False
1     True
2     True
Name: col2, dtype: bool

Источник
Prune
1 июля 2021 в 19:02
0

Вам нужно напечатать *row*, not the result of the check. Use df[где <условие>]`.

Ответы (1)

avatar
Andrej Kesely
1 июля 2021 в 19:17
1

Вы можете использовать логическое индексирование:

mask = df1["col2"].isin(df2["col1"])
print(df1[mask])

Отпечатки:

   col1  col2  col3
1     4    55     6
2     1     8    88