多索引索引中的不一致行为

2024-03-29 15:09:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我得到了不一致的索引行为,这取决于我的多索引数据帧中的一个索引是整数还是字符串。举个例子:

带一个字符串索引的多索引:

a = [['a','a','a','b','b','b','c','c'],[2,1,1,1,2,2,2,1]]
b = [['a','b','c','a','b','c','a','b'],[2,2,2,2,4,4,4,4]]
index=pd.MultiIndex.from_tuples(list(zip(*b)),names=['num1','num2'])
df1=pd.DataFrame({'letters': a[0],'numbers': a[1]},index=index)
df1.sort_index(inplace=True) # avoid lex sort warnings

df1
          letters  numbers
num1 num2                 
a    2          a        2
     2          b        1
     4          c        2
b    2          a        1
     4          b        2
     4          c        1
c    2          a        1
     4          b        2

df1.loc['a',2]['letters'][0]
'a'

df1.loc['a',2]['letters'][1]
'b'

包含所有整数索引的多索引:

a = [['a','a','a','b','b','b','c','c'],[2,1,1,1,2,2,2,1]]
b = [[1,2,3,1,2,3,1,2],[2,2,2,2,4,4,4,4]]
index=pd.MultiIndex.from_tuples(list(zip(*b)),names=['num1','num2'])
df1=pd.DataFrame({'letters': a[0],'numbers': a[1]},index=index)
df1.sort_index(inplace=True) # avoid lex sort warnings

df1
          letters  numbers
num1 num2                 
1    2          a        2
     2          b        1
     4          c        2
2    2          a        1
     4          b        2
     4          c        1
3    2          a        1
     4          b        2

df1.loc[1,2]['letters'][0]
'a'

df1.loc[1,2]['letters'][1]
num2
2    a
2    b
Name: letters, dtype: object

第一种情况下的行为是我所期望的。有人能解释为什么在第二种情况下,用1索引会返回一个序列而不是字符串'b'


Tags: 字符串fromindex整数sortloclistpd
1条回答
网友
1楼 · 发布于 2024-03-29 15:09:05

如果使用^{}/^{}作为“按位置选择”,则所有工作状态良好

对于MultiIndexed DataFrame的选择值,也可以使用tuple

a = df1.loc[('a',2), 'letters'].iat[0]
print (a)
a

b = df1.loc[('a',2), 'letters'].iat[1]
print (b)
b

a = df1.loc[(1,2), 'letters'].iat[0]
print (a)
a

b = df1.loc[(1,2), 'letters'].iat[1]
print (b)
b

相关问题 更多 >