Я пытаюсь установить значения определенных ячеек в мультидексном фрейме Pandas MultiIndex, выбрав эти ячейки с помощью списка.
Обратите внимание на последовательность обоих списков.
df.loc[(['Peter','John','Tom'],'AAPL'),1] = ['Peter', 'John', 'Tom']
Проблема: Однако значения устанавливаются в неправильную ячейку. Например, я ожидаю, что значение 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
Код для воспроизведения проблемы
import pandas as pd
# Initialize MultiIndex DataFrame
stocks = ['AAPL', 'GOOG', 'NFLX']
names = ['Tom', 'John', 'Peter']
midx = pd.MultiIndex.from_product([names, stocks], names=['Name','Stock'])
df = pd.DataFrame(index=midx, columns=[0,1,2])
df.loc[pd.IndexSlice[:,:],:] = 0
# Partially populate the empty MultiIndex DataFrame
df.loc[('Tom', 'AAPL'), 1] = 36
df.loc[('Peter', 'GOOG'), 2] = 46
print(df) # looks correct
# Set values for some cells
df.loc[(['Peter','John','Tom'],'AAPL'),1] = ['Peter', 'John', 'Tom']
print(df) # wrong!!!