Python 使用列表选择多索引数据帧中的单元格
我试图通过使用列表选择这些单元格来设置Pandas多索引数据帧中某些单元格的值 注意两个列表的顺序 问题:但是,值设置到了错误的单元格。例如,我希望在索引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
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
干杯,
杰西