【发布时间】:2022-01-25 09:21:18
【问题描述】:
我有一个带有 3 个级别的 MultiIndex 的 DataFrame name、lower 和 upper。
我想查询name是某个特定值和某个数字nlower < n < upper的数据(不一定是<,也可以是<=)
import pandas as pd
df = pd.DataFrame({
'name': ['foo', 'foo', 'bar', 'bar'],
'lower': [0, 3, 0, 6],
'upper': [2, 5, 5, 11],
'some_data': [0, 1, 2, 3],
})
df = df.set_index(['name', 'lower', 'upper'], drop=True)
df = df.sort_index()
print(df)
# some_data
# name lower upper
# bar 0 5 2
# 6 11 3
# foo 0 2 0
# 3 5 1
# Let's say I want to get the data where name is 'foo' and 1 is between lower and upper
print(df.loc[('foo', slice(None, 1), slice(1, None)), :])
# some_data
# name lower upper
# foo 0 2 0
但现在我想拥有:
-
name为 'foo' 且 1 在lower和upper之间的数据 -
name为 'foo' 且 4 在lower和upper之间的数据 -
name为“bar”且 7 在lower和upper之间的数据
结果可能如下所示:
some_data
name contains
foo 1 0
foo 4 1
bar 7 3
逐个执行此操作很慢。有什么方法可以选择多行吗?
注意:我不必使用 DataFrame,也不必使用 MultiIndex。如果有一些数据结构更适合这项工作,我很乐意使用它。
【问题讨论】:
-
区间索引最适合这个
-
请在您的数据框中添加更多行,并多解释一下您的想法。获取 C 在 A 和 B 之间的行,或 1 在 A 和 B 之间的行?
-
区间索引是否可以处理重叠区间?
-
好的,有一个错误阻止我在 MultiIndex github.com/pandas-dev/pandas/issues/25298 中使用区间索引
-
请为
n的多个值添加示例数据