Как выбрать строки, содержащие в столбце данные, которые есть в столбце другого фрейма данных?
Есть фрейм df1:
a b c d
0 23 4 34 12
1 24 25 34 2
2 43 11 77 87
3 34 2 2 34
4 3 55 19 11
5 42 74 29 44
6 54 9 11 12
и df2:
b
0 4
1 11
2 2
3 9
Нужно выбрать из df1 строки, содержащие в столбце b значения, которые также содержит в своем столбце b фрейм данных df2.
Ожидаемый результат:
a b c d
0 23 4 34 12
2 43 11 77 87
3 34 2 2 34
6 54 9 11 12
Мой код возвращает вообще булевы значения:
import pandas as pd
df1 = pd.DataFrame([[23, 4, 34, 12], [24, 25, 34, 2], [43, 11, 77, 87],
[34, 2, 2, 34], [3, 55, 19, 11], [42, 74, 29, 44], [54, 9, 11, 12]])
df2 = pd.DataFrame([[4], [11], [2], [9]])
df1.rename({0: 'a', 1: 'b', 2: 'c', 3: 'd'}, axis=1, inplace=True)
df2.rename({0: 'b'}, axis=1, inplace=True)
df3 = df2['b'].isin(df1['b'])
print(df3)
Ответы (2 шт):
Автор решения: strawdog
→ Ссылка
res = df1[df1["b"].isin(df2["b"])]
res:
a b c d
0 23 4 34 12
2 43 11 77 87
3 34 2 2 34
6 54 9 11 12
Автор решения: MaxU
→ Ссылка
Вариант 1:
In [229]: res = df1.merge(df2)
In [230]: res
Out[230]:
a b c d
0 23 4 34 12
1 43 11 77 87
2 34 2 2 34
3 54 9 11 12
если нужно сохранить исходные индексы:
In [231]: res = df1.reset_index().merge(df2).set_index("index").rename_axis(None)
In [232]: res
Out[232]:
a b c d
0 23 4 34 12
2 43 11 77 87
3 34 2 2 34
6 54 9 11 12
Вариант 2:
In [234]: res = df1.query("b in @df2.b")
In [235]: res
Out[235]:
a b c d
0 23 4 34 12
2 43 11 77 87
3 34 2 2 34
6 54 9 11 12