Python 熊猫X何时删除维度?我如何强制它删除/不删除维度?

Python 熊猫X何时删除维度?我如何强制它删除/不删除维度?,python,pandas,Python,Pandas,有时我看到xs会从数据帧返回一个序列,如果返回的只是一行,有时则不是。如何强制它发生/不发生?(可能与……有关) 在这里,它返回一行数据帧,而不是一个序列 df2 = pd.DataFrame({'a':['a1','a2','a3'], 'b':['b1','b1','b1'], 'c':[1,1,1], 'value':np.random.randint(0,100,3)}) d

有时我看到
xs
会从数据帧返回一个序列,如果返回的只是一行,有时则不是。如何强制它发生/不发生?(可能与……有关)

在这里,它返回一行数据帧,而不是一个序列

df2 = pd.DataFrame({'a':['a1','a2','a3'],
                   'b':['b1','b1','b1'],
                   'c':[1,1,1],
                   'value':np.random.randint(0,100,3)})
df2.set_index(['a','b','c'], inplace=True)
df2.sortlevel(inplace = True)
df2.xs(('a1','b1',1))

value    30
Name: (a1, b1, 1), dtype: int64
在这种情况下,只返回序列

使现代化 我的同事刚刚发现,如果df的长度很大,它将返回一个数据帧,否则,它将返回一个序列

n=25
df = pd.DataFrame({'a':np.append(np.random.randint(0,10,n), -1),
                   'b':np.append(np.random.randint(0,10,n), -1),
                   'c':np.append(np.random.randint(0,10,n), -1),
                   'value':np.random.randint(0,100,n+1)})

df.set_index(['a','b','c'], inplace=True)
df.sortlevel(inplace = True)

display(df.xs((-1,-1,-1), drop_level=True))
df.index.get_loc((-1,-1,-1))
n
的边界甚至不一致,这可能是由于指数中有许多不同的值

但是,结果是序列还是数据帧取决于if
get\u loc
返回0或
切片(0,1,无)

此外,如果键不在索引中,
get\u loc
有时会抛出
keyrerror
异常,有时会返回
Slice(0,0,无)


错误报告已存档

好的,它们都是定义的行为。所以我有责任处理它。

可能是一个bug,请在githubI文件上提交一份报告,然后它就关闭了。在github上提出问题似乎没有意义。您提交的问题与drop level无法使用完全指定的索引器的问题完全不同-这可能是一个错误-您提交的不是我结束了您的问题,因为您仍然没有解释您实际在做什么-
n=25
df = pd.DataFrame({'a':np.append(np.random.randint(0,10,n), -1),
                   'b':np.append(np.random.randint(0,10,n), -1),
                   'c':np.append(np.random.randint(0,10,n), -1),
                   'value':np.random.randint(0,100,n+1)})

df.set_index(['a','b','c'], inplace=True)
df.sortlevel(inplace = True)

display(df.xs((-1,-1,-1), drop_level=True))
df.index.get_loc((-1,-1,-1))