Python DataFrame - выбор строк данных на основе значений в другом кадре данных

1

Я борюсь с проблемой, связанной с dataframe. Существует два блока данных df и dff, как показано ниже.

data = np.array([['', 'col1', 'col2'],
            ['row1', 1, 2],
            ['row2', 3, 4]])
df = pd.DataFrame(data=data[1:,1:].astype(int), index=data[1:,0],columns=data[0,1:])


filters=np.array([['', 'col1', 'col2'],
                 ['row1', 1, 1],
                 ['row2', 1, 2],
                 ['row3', 3, 2]])
dff = pd.DataFrame(data=filters[1:,1:].astype(int), index=filters[1:,0],columns=filters[0,1:])

Я хочу выбрать строки из df так, чтобы их значение col2 принадлежало списку значений, которые можно найти в dff с соответствующим значением col1. Например, для значения col1 равно 1, этот список должен быть [1, 2], для значения col1 равно 2, список - [2].

Моя лучшая попытка решить это

df1 = df[df['col2'].isin(dff[dff['col1']==df['col1']]['col2'])]

Но это приводит к

ValueError: Can only compare identically-labeled Series objects

Любая помощь будет оценена по достоинству. Спасибо.

Теги:
pandas
dataframe

1 ответ

1
Лучший ответ

Насколько я понимаю, вы можете просто aggregate

ndf = dff.groupby('col1').agg(lambda x: list(x)).reset_index()

    col1   col2
0   1      [1, 2]
1   3      [2]

и фильтровать col1 значения col1, которые не находятся в df

ndf[ndf.col1.isin(df.col1)]
  • 1
    Большое спасибо, это то, что мне было нужно, я также узнал что-то новое.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню