首页 > 解决方案 > 在不同的 DataFrame 上使用 DataFrame 过滤器

问题描述

我有两个数据框:

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

有什么办法可以用过滤器做到这一点,还是我需要不同的方法?

标签: pythonpandasdataframe

解决方案


只有你需要:

如果 ID 是索引,则将 ID 作为列:

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

推荐阅读