为什么即使drop_level = True,pandas xs也不会降低级别

时间:2014-02-27 11:13:13

标签: python pandas

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

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

dfi.xs((2,1,7), drop_level=True)
             value    time
a    b    c        
2    1    7     33    1970-01-01 00:00:00.000000033
          7     70    1970-01-01 00:00:00.000000070
          7     75    1970-01-01 00:00:00.000000075
          7     53    1970-01-01 00:00:00.000000053
          7     28    1970-01-01 00:00:00.000000028
          7     21    1970-01-01 00:00:00.000000021
          7     36    1970-01-01 00:00:00.000000036
          7     43    1970-01-01 00:00:00.000000043
          7     67    1970-01-01 00:00:00.000000067
9 rows × 2 columns

dfi.xs((-1,-1,-1), drop_level=True)(一个匹配)

不会丢弃

但是如果dfi.xs((2,1), drop_level=True)

,它会下降

pandas version'0.13.1'

2 个答案:

答案 0 :(得分:1)

你所要求的是没有意义的,因为定义你有多个匹配。

如果你愿意,你可以这样做:

In [43]: dfi.xs((2,1,7)).reset_index(drop=True)
Out[43]: 
    value
0      49
1      98
2       2
3      80
4      47
5      74
6      37
7      23
8       0
9       7
10     58
11     82
12     44

[13 rows x 1 columns]

答案 1 :(得分:0)

问题在此处提交:https://github.com/pydata/pandas/issues/6507

让我知道是否有任何进展或这确实是一种定义的行为。