在不同的 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

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


喵喵时光机
浏览 183回答 2
2回答

HUWWW

只有你需要:如果 ID 是索引,则将 ID 作为列:df1.reset_index(inplace=True) #if ID is the indexdf2.reset_index(inplace=True) #if ID is the indexfiltered_df1=df1[df1['var1'].eq('Foo')]print(filtered_df1)    ID var10   1  Foo1   2  Foo2   3  Foodf2.loc[df2['ID'].isin(filtered_df1['ID'])]   ID var10   2  Foo1   3  Bar

慕尼黑5688855

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  var10   1   Foo1   2   Foo2   3   Foodf2[df2['var1'].apply(filter)]    id  var10   2   Foo3   5   Foo
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python