Использование фильтра DataFrame в другом DataFrame - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть два кадра данных:

df1:
ID var1
1 Foo
2 Foo
3 Foo
4 Bar

df2:
ID var1
2 Foo
3 Bar
4 Bar
5 Foo    
6 Bar

Я создал фильтр для df1, где var1 = 'Foo':

foo_filter=df1['var1']=='Foo'

, который при применении к df1 корректно возвращает:

df1_filtered=df1[foo_filter]

print(df1_filtered)
ID var1
1  Foo
2  Foo
3  Foo

Я хотел бы затем применить тот же фильтр к df2 с выводом этого:

print(df2_filtered)
ID var1
2  Foo
3  Bar

Однако мне представляется эта ошибка:

df2_filtered=df2[foo_filter]
IndexingError: Unalignable boolean Series provided as indexer (index of the boolean Series and of the indexed object do not match

Есть ли способ сделать это с помощью фильтров или мне нужен другой метод?

Ответы [ 2 ]

1 голос
/ 26 сентября 2019

Только вам нужно:

, если идентификатор является индексом, указав идентификатор в виде столбца:

df1.reset_index(inplace=True) #if ID is the index
df2.reset_index(inplace=True) #if ID is the index
filtered_df1=df1[df1['var1'].eq('Foo')]
print(filtered_df1)

    ID var1
0   1  Foo
1   2  Foo
2   3  Foo

df2.loc[df2['ID'].isin(filtered_df1['ID'])]

   ID var1
0   2  Foo
1   3  Bar
0 голосов
/ 26 сентября 2019
df1 = pd.DataFrame({"id":[1,2,3,4], "var1":['Foo', 'Foo', 'Foo', 'Bar']})
df2 = pd.DataFrame({"id":[2,3,4,5, 6], "var1":['Foo','Bar','Bar','Foo', 'Bar']})

def filter(x):
    return x == 'Foo'

df1[df1['var1'].apply(filter)]
    id  var1
0   1   Foo
1   2   Foo
2   3   Foo



df2[df2['var1'].apply(filter)]
    id  var1
0   2   Foo
3   5   Foo
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...