gpt4 book ai didi

python - pandas.DataFrame.query 保持原始多索引

转载 作者:太空宇宙 更新时间:2023-11-04 05:24:33 28 4
gpt4 key购买 nike

我有一个带有多索引的数据框:

>>> df = pd.DataFrame(np.random.randint(0,5,(6, 2)), columns=['col1','col2'])
>>> df['ind1'] = list('AAABCC')
>>> df['ind2'] = range(6)
>>> df.set_index(['ind1','ind2'], inplace=True)

>>> df
col1 col2
ind1 ind2
A 0 2 0
1 2 2
2 1 2
B 3 2 2
C 4 4 0
5 1 4

当我在其中一个索引级别上使用 .loc[] 选择数据,然后应用 .query() 时,结果索引按预期“收缩”到仅匹配结果数据框中包含的那些值:

>>> df.loc['A'].query('col2 == 2')

col1 col2
ind2
1 2 2
2 1 2

>>> df.loc['A'].query('col2 == 2').index

Int64Index([1, 2], dtype='int64', name='ind2')

然而,当我尝试仅使用 .query() 获得相同的结果时,pandas 保持与原始数据帧相同的索引(尽管事实上,它的行为与上面不同,在单个索引的情况 - 结果索引从 [0,1,2][1,2],仅匹配 col2 == 2 行):

>>> df.query('ind1 == "A" & col2 == 2')

col1 col2
ind1 ind2
A 1 2 2
2 1 2

>>> df.query('ind1 == "A" & col2 == 2').index

MultiIndex(levels=[['A', 'B', 'C'], [0, 1, 2, 3, 4, 5]],
labels=[[0, 0], [1, 2]],
names=['ind1', 'ind2'])

这是错误还是功能?如果有特征,你能解释一下这种行为吗?

编辑1:我期望以下索引:

MultiIndex(levels=[['A'], [1, 2]],
labels=[[0, 0], [0, 1]],
names=['ind1', 'ind2'])

编辑2:如 Dataframe Slice does not remove Index Values 中所述切片 DF 时根本不应删除索引值;这种行为应该会产生以下结果:

>>> df.loc['A'].query('col2 == 2')

col1 col2
ind2
1 2 2
2 1 2

>>> df.loc['A'].query('col2 == 2').index

EXPECTATION: Int64Index([0, 1, 2], dtype='int64', name='ind2')
REALITY: Int64Index([1, 2], dtype='int64', name='ind2')

最佳答案

df.loc[A] 返回一个带有常规(“单个”)索引的 DF(或“ View ”):

In [12]: df.loc['A']
Out[12]:
col1 col2
ind2
0 1 1
1 0 3
2 1 2

所以 .query() 将应用于具有常规索引的 DF...

关于python - pandas.DataFrame.query 保持原始多索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39253672/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com