python-3.x - 如何从多索引 Pandas 数据框中过滤值
问题描述
我有一个多索引熊猫数据框df
,如下所示:
Count
Letter Direction
A -1 3
1 0
B -1 2
1 4
C -1 4
1 10
D -1 8
1 1
E -1 4
1 5
F -1 1
1 1
我想过滤掉Letters
哪个方向都有Count < 2
两个或一个方向。
试过了df[df.Count < 2]
,但它给出了以下输出:
Count
Letter Direction
A 1 0
D 1 1
F -1 1
1 1
所需的输出如下,
Count
Letter Direction
A -1 3
1 0
D -1 8
1 1
F -1 1
1 1
我应该怎么做才能得到上述?
解决方案
GroupBy.transform
与布尔掩码一起使用GroupBy.any
-检查每个第一级any
是否至少有一个,并返回与原始 DataFrame 相同的大小,因此可以通过以下方式过滤:True
MultiIndex
transform
mask
boolean indexing
df = df[(df.Count < 2).groupby(level=0).transform('any')]
print (df)
Count
Letter Direction
A -1 3
1 0
D -1 8
1 1
F -1 1
1 1
另一种解决方案是用于按条件MultiIndex.get_level_values
获取值Letter
并选择按DataFrame.loc
:
df = df.loc[df.index.get_level_values(0)[df.Count < 2]]
print (df)
Count
Letter Direction
A -1 3
1 0
D -1 8
1 1
F -1 1
1 1
推荐阅读
- java - 无法在android上下载图像并存储为位图
- python - 从网站生成和下载 tsv(使用 python)
- java - 如何修复 intellij 中阻止我运行项目的错误
- html - 属性:text-decoration-skip-ink 不存在:无
- php - 使用 php (curl) 以编程方式更新 github 代码(无库)
- tensorflow - 针对许多小型矩阵向量乘法优化 Tensorflow
- google-apps-script - Google表格:在选中复选框后防止取消选中该复选框
- html - 如何倾斜带有背景图像的div的底部边框
- excel - 从字符串中删除字符 AZ
- html - 为什么我的网站在移动设备上的布局不同?