Я борюсь с проблемой, связанной с 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
Любая помощь будет оценена по достоинству. Спасибо.
Насколько я понимаю, вы можете просто 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)]