У меня проблемы с MultiIndex и stack(). Следующий пример основан на solution from Calvin Cheung на StackOvervlow.проблемы с MultiIndex
=== multi.csv ===
h1,main,h3,sub,h5
a,A,1,A1,1
b,B,2,B1,2
c,B,3,A1,3
d,A,4,B2,4
e,A,5,B3,5
f,B,6,A2,6
=== multi.py ===
#!/usr/bin/env python
import pandas as pd
df1 = pd.read_csv('multi.csv')
df2 = df1.pivot('main', 'sub').stack()
print(df2)
=== output ===
h1 h3 h5
main sub
A A1 a 1 1
B2 d 4 4
B3 e 5 5
B A1 c 3 3
A2 f 6 6
B1 b 2 2
Это работает до тех пор, как в столбце юга является уникальным по отношению к соответствующей записи в главном столбце. Но если мы изменим запись подкаталога в строке e на B2, тогда B2 больше не является уникальным в группе из строк A, и мы получаем сообщение об ошибке: «pandas.core.reshape.ReshapeError: индекс содержит повторяющиеся записи, не может изменить форму», ,
Я ожидал, что форма подиндекса будет вести себя как форма первичного индекса, где дубликаты обозначены пустыми элементами под первой строкой.
=== expected output ===
h1 h3 h5
main sub
A A1 a 1 1
B2 d 4 4
e 5 5
B A1 c 3 3
A2 f 6 6
B1 b 2 2
Так что мой вопрос, как я могу структурировать мультииндексный таким образом, что позволяет дубликаты в подуровнях?
Индексы (включая MultiIndexes) должны быть уникальными. Подумайте об этом, как об индексе, все элементы - это кортежи. Это нормально, если один уровень не является единственным, но весь набор элементов MultiIndex для определенной строки должен быть уникальным для этой строки. Я думаю, вам нужно переосмыслить свою структуру. Почему вы хотите, чтобы эти значения были индексами, а не только значениями столбцов? – BrenBarn
Хорошо, я соглашусь, что мне нужно переосмыслить MultiIndexes. Я надеялся на то, что было как интуитивно понятным, так и легким для написания фрагментов. Но я снова посмотрю на это, а также посмотрю, смогу ли я улучшить документацию. – highpost