Python 基于范围(包括负范围)加入数据帧的KeyError

Python 基于范围(包括负范围)加入数据帧的KeyError,python,pandas,Python,Pandas,在一个示例中,我能够根据值是否出现在指定范围内,将列从一个数据帧连接到另一个数据帧。@anky_91发布的解决方案适用于我提供的有限工作示例,但是一些简单的更改导致了问题,这向我表明该解决方案还不够通用 例如,考虑使用从最大值为2到最小值为13的范围。除了截断df1以与之匹配外,这是对上一个问题的唯一更改: df1 = pd.DataFrame() df2 = pd.DataFrame() df1['col1'] = ['A', 'B', 'C'] df1['col2'] = ['alpha'

在一个示例中,我能够根据值是否出现在指定范围内,将列从一个数据帧连接到另一个数据帧。@anky_91发布的解决方案适用于我提供的有限工作示例,但是一些简单的更改导致了问题,这向我表明该解决方案还不够通用

例如,考虑使用从最大值为2到最小值为13的范围。除了截断df1以与之匹配外,这是对上一个问题的唯一更改:

df1 = pd.DataFrame()
df2 = pd.DataFrame()

df1['col1'] = ['A', 'B', 'C']
df1['col2'] = ['alpha', 'beta', 'gamma']

df1['max'] = [2, -3, -7]
df1['min']= [-3, -7, -13]

active_pressures = pd.DataFrame()
df2['x'] = np.linspace(2, -13, 100)


s = pd.IntervalIndex.from_arrays(df1['min'],df1['max'], 'left')
df2 = df2.assign(**df1.set_index(s).loc[df2['x'],['col1','col2']].reset_index(drop=True))

上面抛出了一个键错误。为什么会发生这种情况?

最通用的解决方案是将两个数据帧交叉连接在一起,然后通过以下方式进行过滤:

df=df1.assign(a=1)。merge(df2.assign(a=1),on='a')
df1=df[(df['x']>=df['min'])和(df['x']
另外,如果
x
中的所有数据都在
min
max
之间,我认为这里也可以像前面的回答一样使用

上面抛出了一个键错误。为什么会这样


我猜是虫子,但不是100%确定。新发行的最佳帖子。

我如何控制范围是打开的还是关闭的?@user32882-你是对的,那么
df[(df['x']>=df['min'])和(df['x']
是必要的。我更喜欢这种方式。这对我来说更直观,允许我控制边界是否闭合。。。
df = df1.assign(a=1).merge(df2.assign(a=1), on='a')
df1 = df[(df['x'] >= df['min']) & (df['x'] < df['max'])]