Значительно обновленный вопрос : Я обнаружил проблему, вызвавшую ошибку: Фрейм данных содержит несколько пустых столбцов. Добавлен воспроизводимый пример.
У меня есть Pandas DataFrame, который выглядит так, но гораздо больше (2500x288):
df = pd.DataFrame(np.random.randn(3, 8),
columns=pd.MultiIndex.from_arrays((['A','A','A', 'A', 'B', 'B', 'B', 'B'],
['a', 'b', 'c', 'd', 'a', 'b', 'c', 'd'],
['i', 'ii', 'i', 'ii', 'i', 'ii', 'i', 'ii'])))
A B
a b c d a b c d
i ii i ii i ii i ii
0 -0.344673 0.711897 -1.306805 -1.926644 -0.351334 -0.864423 -1.023401 -0.284710
1 0.730107 0.245481 -0.570591 1.740258 0.779193 -0.151460 2.082086 -0.008099
2 -0.806092 -1.364315 0.845041 1.739843 0.737802 -2.232088 0.114731 -1.028346
Теперь я хотел бы суммировать его по двум уровням столбцов MultiIndex, например:
df.sum(level=[1,2], axis=1)
a b c d
i ii i ii
0 -0.696007 -0.152525 -2.330206 -2.211354
1 1.509300 0.094021 1.511495 1.732159
2 -0.068290 -3.596403 0.959772 0.711497
Однако, как только столбцы пусты, возникает ValueError
.
df.loc[:, ('A','b','ii')] = None
df.sum(level=[1,2], axis=1)
ValueError: No axis named 1 for object type <class 'pandas.core.series.Series'
Работа с одноуровневыми суммами (например, df.sum(level=1, axis=1)
). Также работает с использованием transpose()
, например, df.transpose().sum(level=[1,2], axis=0).transpose()
, хотя это невероятно медленно. Это говорит мне, что это может быть скорее ошибкой, а не тем, что я «делаю это неправильно».
Использование df.groupby(level=[1,2], axis=1).sum()
дает ту же ошибку.