【发布时间】:2019-08-30 01:19:35
【问题描述】:
我想为数据框中的每一行分配一个间隔,这样所有行都不会重叠,而是覆盖整个可能的范围。因此,我可以根据给定区间内的值过滤行。
我使用过pd.Interval,但是当我尝试“正常”过滤时它不起作用:
df = pd.DataFrame({"rating":["bad","average","good"],
"stars":[pd.Interval(left=0,right=2,closed="left"),
pd.Interval(left=2,right=4,closed="left"),
pd.Interval(left=4,right=5,closed="both")]})
stars_val=2.5
filtered_df = df[stars_val in df.stars]
它给出了以下错误:
KeyError Traceback (most recent call last)
/usr/local/lib/python3.6/dist-packages/pandas/core/indexes/base.py in get_loc(self, key, method, tolerance)
2656 try:
-> 2657 return self._engine.get_loc(key)
2658 except KeyError:
pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()
pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()
pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()
pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()
KeyError: False
一个工作代码应该给出结果:
rating stars
1 average [2, 4)
【问题讨论】: