Python 使用列表选择多索引数据帧中的单元格

Python 使用列表选择多索引数据帧中的单元格,python,python-3.x,pandas,dataframe,multi-index,Python,Python 3.x,Pandas,Dataframe,Multi Index,我试图通过使用列表选择这些单元格来设置Pandas多索引数据帧中某些单元格的值 注意两个列表的顺序 问题:但是,值设置到了错误的单元格。例如,我希望在索引Peter下设置值Peter,但它是在Tom下设置的 任何人都知道原因,正确的做法是什么 换句话说,我们如何确保df.loc()中使用的列表的顺序(例如['Peter','John','Tom']内部df.loc)与值列表的顺序相同(例如:['Peter','John','Tom']右侧=) 预期结果 0 1

我试图通过使用列表选择这些单元格来设置Pandas多索引数据帧中某些单元格的值

注意两个列表的顺序

问题:但是,值设置到了错误的单元格。例如,我希望在索引
Peter
下设置值
Peter
,但它是在
Tom
下设置的

任何人都知道原因,正确的做法是什么

换句话说,我们如何确保
df.loc()
中使用的列表的顺序(例如
['Peter','John','Tom']
内部
df.loc
)与值列表的顺序相同(例如:
['Peter','John','Tom']
右侧
=

预期结果

             0      1   2
Name  Stock              
Tom   AAPL   0    Tom   0
      GOOG   0      0   0
      NFLX   0      0   0
John  AAPL   0   John   0
      GOOG   0      0   0
      NFLX   0      0   0
Peter AAPL   0  Peter   0
      GOOG   0      0  46
      NFLX   0      0   0
             0      1   2
Name  Stock              
Tom   AAPL   0  Peter   0   <----- should be Tom
      GOOG   0      0   0
      NFLX   0      0   0
John  AAPL   0   John   0
      GOOG   0      0   0
      NFLX   0      0   0
Peter AAPL   0    Tom   0   <----- should be Peter
      GOOG   0      0  46
      NFLX   0      0   0
实际结果

             0      1   2
Name  Stock              
Tom   AAPL   0    Tom   0
      GOOG   0      0   0
      NFLX   0      0   0
John  AAPL   0   John   0
      GOOG   0      0   0
      NFLX   0      0   0
Peter AAPL   0  Peter   0
      GOOG   0      0  46
      NFLX   0      0   0
             0      1   2
Name  Stock              
Tom   AAPL   0  Peter   0   <----- should be Tom
      GOOG   0      0   0
      NFLX   0      0   0
John  AAPL   0   John   0
      GOOG   0      0   0
      NFLX   0      0   0
Peter AAPL   0    Tom   0   <----- should be Peter
      GOOG   0      0  46
      NFLX   0      0   0
#为某些单元格设置值
df.loc[(['Peter','John','Tom','AAPL'),1]=['Peter','John','Tom']
打印(df)#错误!!!

像这样,为每个元素提供完整的索引

df.loc[[('Peter','AAPL'),('John','AAPL'),('Tom','AAPL')],1]=['Peter','John','Tom']
打印(df)

注意,重要的是要注意,当涉及索引时,元组和列表在pandas中的处理方式并不相同。元组被解释为一个多级键,而列表用于指定多个键。或者换句话说,元组水平移动(遍历级别),列表垂直移动(扫描级别)


虽然我不知道是什么导致了这个问题,但可以通过更精确地处理多索引数据来解决这个问题

df.loc[[('Peter','AAPL'),('John','AAPL'),('Tom','AAPL')],1] = ['Peter','John','Tom']
print(df) # this one works as you would expect

# to make it a bit more automated (create index from list, set 1st column to appropriate list item
# name list:
pjt = ['Peter','John','Tom']
# index list built from name list
pjt_aapl = [ (name,'AAPL') for name in ['Peter','John','Tom'] ]
# set first column to name
df.loc[ pjt_aapl, 1] = pjt
干杯, 杰西