根据列值从DataFrame中获取列。

3

我正在学习pandas, 但我卡在了这个问题上。

我有一个这样的数据框:

                      apple                    orange                    banana
0  (2021-01-01 00:00:00, 2)  (2021-01-02 00:00:00, 1)  (2021-01-01 00:00:00, 4)
1  (2021-01-02 00:00:00, 5)  (2021-01-04 00:00:00, 2)  (2021-01-03 00:00:00, 6)
2  (2021-01-03 00:00:00, 8)  (2021-01-06 00:00:00, 3)  (2021-01-04 00:00:00, 7)

如何按列值排除一个列?

例如,我只想要那些水果的数量大于6的结果。

                      apple                    banana
0  (2021-01-01 00:00:00, 2)  (2021-01-01 00:00:00, 4)
1  (2021-01-02 00:00:00, 5)  (2021-01-03 00:00:00, 6)
2  (2021-01-03 00:00:00, 8)  (2021-01-04 00:00:00, 7)

另一个例子,水果数量在大于等于2且小于等于3的情况下:

期望结果

                      apple                    orange
0  (2021-01-01 00:00:00, 2)  (2021-01-02 00:00:00, 1)
1  (2021-01-02 00:00:00, 5)  (2021-01-04 00:00:00, 2)
2  (2021-01-03 00:00:00, 8)  (2021-01-06 00:00:00, 3)

这种情况可以使用pandas吗?感谢任何帮助。

1个回答

4

通过您展示的示例,尝试使用 Pandas 的布尔掩码和 loc 函数进行以下操作:

m = df.apply(lambda s:s.str[1]).gt(6).any()
df.loc[:,m]

解释:使用lambda函数选择每列元组值的第二个元素,一旦选择了该元素,就检查哪个元素具有超过6的值,然后将其传递给any函数,如果在整个列中找到任何大于6的元素,则会返回True。

输出结果如下:

                      apple                    banana
0  (2021-01-01 00:00:00, 2)  (2021-01-01 00:00:00, 4)
1  (2021-01-02 00:00:00, 5)  (2021-01-03 00:00:00, 6)
2  (2021-01-03 00:00:00, 8)  (2021-01-04 00:00:00, 7)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接