【发布时间】:2023-04-02 09:34:02
【问题描述】:
考虑如下的数据框。
import pandas as pd
# Initialize dataframe
df1 = pd.DataFrame(columns=['bar', 'foo'])
df1['bar'] = ['001', '001', '001', '001', '002', '002', '003', '003', '003']
df1['foo'] = [-1, 0, 2, 3, -8, 1, 0, 1, 2]
>>> print df1
bar foo
0 001 -1
1 001 0
2 001 2
3 001 3
4 002 -8
5 002 1
6 003 0
7 003 1
8 003 2
# Lower and upper bound for desired range
lower_bound = -5
upper_bound = 5
我想在 Pandas 中使用 groupby 来返回一个数据框,该数据框过滤掉符合条件的 bar
行。特别是,如果此 bar
的 foo
值之一不在 lower_bound
和 upper_bound
之间,我想过滤掉带有 bar
的行。
在上面的例子中,bar = 002
的行应该被过滤掉,因为不是所有bar = 002
的行在-5
和5
之间都包含foo
的值(即行索引4
包含foo = -8
)。此示例所需的输出如下。
# Desired output
bar foo
0 001 -1
1 001 0
2 001 2
3 001 3
6 003 0
7 003 1
8 003 2
我尝试了以下方法。
# Attempted solution
grouped = df1.groupby('bar')['foo']
grouped.filter(lambda x: x < lower_bound or x > upper_bound)
但是,这会产生 TypeError: the filter must return a boolean result
。此外,当我希望结果返回一个数据框对象时,这种方法可能会返回一个 groupby 对象。
【问题讨论】:
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python Pandas groupby:根据值的条件过滤 - Python技术站