Я пытаюсь анализировать данные с помощью сводных таблиц, используя Pandas.
Для мультииндексов все работает нормально.
У меня есть эта сводная таблица:
>>>print(pivtab)
count win
pp ps
8000 8200 4 2
8100 8200 2 1
8300 3 1
Теперь я могу выбрать, например, значение во 2-й строке в столбце «count» с помощью
>>>print(pivtab["count"][1])
2
Неожиданное поведение возникает при использовании только одной сводной таблицы индекса. Сводная таблица выглядит следующим образом:
count win
pp
8000 4 2
8100 5 2
Теперь, когда я пытаюсь использовать то же самое с print(pivtab["count"][1])
Я получаю KeyError: 1
. Кажется, что Python теперь принимает не номер строки, а имя строки (= индекс). С
>>>print(pivtab["count“][8100])
5
все отлично работает.
Полный код выглядит так:
import pandas as pd
columns = ["count","game_Id","season","win","pp","ps"]
matrix = pd.DataFrame(columns=columns)
# Create a test matrix
for i in range(1,10):
win = 0
if int(i/2) == i/2:
win = 1
pprim = 8000
if i > 4:
pprim = 8100
psub = 8200
if i > 6:
psub = 8300
new_row = pd.DataFrame([[1, i, 11, win, pprim, psub]], columns=columns)
matrix = matrix.append(new_row,ignore_index=True)
print(matrix)
pivtab = pd.pivot_table(matrix, index=["pp","ps"], values=["count","win"], aggfunc="sum")
print("\n", pivtab)
print(pivtab["count"][1])
Чтобы полностью запутаться, я попробовал другую тестовую матрицу ... и тут все отлично работает!
import pandas as pd
matrix = pd.DataFrame({"A":["hey","hey","boo","boo"], "B":[1,2,3,2], "valueA":[123,441,190,123], "valueB":[5,5,6,6]})
piv_matrix = pd.pivot_table(matrix, index=["A"], values=["valueA","valueB"], aggfunc="sum")
print(piv_matrix)
print("\nValue:", piv_matrix["valueA"][1])
Результат:
valueA valueB
A
boo 313 12
hey 564 10
Value: 564
Я был бы рад, если бы вы объяснили мне причину этого неожиданного (по крайней мере для меня) поведения. Спасибо!