Выберите строки информационного кадра на основе другого информационного кадра в Python - PullRequest
0 голосов
/ 02 января 2019

У меня есть следующий фрейм данных:

import pandas as pd
import numpy as np
df1 = pd.DataFrame({'A': 'foo bar foo bar foo bar foo foo'.split(),
                   'B': 'one one two three two two one three'.split(),
                   'C': np.arange(8), 'D': np.arange(8) * 2})
print(df1)

    A      B   C   D
0  foo    one  0   0
1  bar    one  1   2
2  foo    two  2   4
3  bar  three  3   6
4  foo    two  4   8
5  bar    two  5  10
6  foo    one  6  12
7  foo  three  7  14

Я надеюсь выбрать строки в df1 с помощью df2 следующим образом:

df2 = pd.DataFrame({'A': 'foo bar'.split(),
                   'B': 'one two'.split()
                   })
print(df2)

     A    B
0  foo  one
1  bar  two

Вот что я пробовал в Python, ноМне просто интересно, есть ли другой метод.Благодарю.

df = df1.merge(df2, on=['A','B'])
print(df)

Вот ожидаемые результаты.

    A      B   C   D
0  foo    one  0   0
1  bar    two  5  10
2  foo    one  6  12

Использование панд для выбора строк с использованием двух разных столбцов из кадра данных?

Выберите столбцы DataFrame на основе другого DataFrame

1 Ответ

0 голосов
/ 02 января 2019

Самое простое - использовать merge с внутренним соединением.

Другое решение с фильтрацией:

arr = [np.array([df1[k] == v for k, v in x.items()]).all(axis=0) for x in df2.to_dict('r')]
df = df1[np.array(arr).any(axis=0)]
print(df)
     A    B  C   D
0  foo  one  0   0
5  bar  two  5  10
6  foo  one  6  12

Или создать MultiIndex и отфильтровать с помощью Index.isin:

df = df1[df1.set_index(['A','B']).index.isin(df2.set_index(['A','B']).index)]
print(df)
     A    B  C   D
0  foo  one  0   0
5  bar  two  5  10
6  foo  one  6  12
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...