python - 在不同的 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
有什么办法可以用过滤器做到这一点,还是我需要不同的方法?
解决方案
只有你需要:
如果 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
推荐阅读
- php - PHP 7 是否有等价的 array_value_last()?
- tkinter - 我无法在 tkinter 的列表框中获取所选项目的索引值
- python - Panda 的 ExcelWriter 附加模式不起作用
- git - 如何在使用 git 命令行创建合并请求时传递目标分支
- kubernetes - 是否有在 kubernetes 中创建守护程序集的命令式命令?
- python - lru_cache 上的 Python 3 脚本崩溃
- python-3.x - 使用 Selenium 将浏览器窗口大小调整为屏幕的 50%
- python-3.x - 鼻子单元测试发现在python 3.8上被打破
- c++ - Qt3D QAbstractTextureImage 像素化
- svg - 如何在工具栏中放置svg图标