У меня есть датафрейм, который создается из сводной таблицы, и выглядит примерно так:
import pandas as pd
d = {('company1', 'False Negative'): {'April- 2012': 112.0, 'April- 2013': 370.0, 'April- 2014': 499.0, 'August- 2012': 431.0, 'August- 2013': 496.0, 'August- 2014': 221.0},
('company1', 'False Positive'): {'April- 2012': 0.0, 'April- 2013': 544.0, 'April- 2014': 50.0, 'August- 2012': 0.0, 'August- 2013': 0.0, 'August- 2014': 426.0},
('company1', 'True Positive'): {'April- 2012': 0.0, 'April- 2013': 140.0, 'April- 2014': 24.0, 'August- 2012': 0.0, 'August- 2013': 0.0,'August- 2014': 77.0},
('company2', 'False Negative'): {'April- 2012': 112.0, 'April- 2013': 370.0, 'April- 2014': 499.0, 'August- 2012': 431.0, 'August- 2013': 496.0, 'August- 2014': 221.0},
('company2', 'False Positive'): {'April- 2012': 0.0, 'April- 2013': 544.0, 'April- 2014': 50.0, 'August- 2012': 0.0, 'August- 2013': 0.0, 'August- 2014': 426.0},
('company2', 'True Positive'): {'April- 2012': 0.0, 'April- 2013': 140.0, 'April- 2014': 24.0, 'August- 2012': 0.0, 'August- 2013': 0.0,'August- 2014': 77.0},}
df = pd.DataFrame(d)
company1 company2
FN FP TP FN FP TP
April- 2012 112 0 0 112 0 0
April- 2013 370 544 140 370 544 140
April- 2014 499 50 24 499 50 24
August- 2012 431 0 0 431 0 0
August- 2013 496 0 0 496 0 0
August- 2014 221 426 77 221 426 77
Я ищу итерацию по верхнему уровню многоиндексного столбца, чтобы создать столбец суммы для каждой компании:
company1 company2
FN FP TP SUM FN FP TP SUM
April- 2012 112 0 0 112 112 0 0 112
April- 2013 370 544 140 1054 370 544 140 1054
April- 2014 499 50 24 573 499 50 24 573
August- 2012 431 0 0 431 431 0 0 431
August- 2013 496 0 0 496 496 0 0 496
August- 2014 221 426 77 724 221 426 77 724
Я не знаю названия компаний заранее, поэтому нужно будет зацикливаться
1 ответ
Вы можете рассчитать эту сумму, указав level
(вы хотите просуммировать по первому уровню (уровень 0) , чтобы свернуть второй уровень):
In [29]: df.sum(axis=1, level=0)
Out[29]:
company1 company2
April- 2012 112 112
April- 2013 1054 1054
April- 2014 573 573
August- 2012 431 431
August- 2013 496 496
August- 2014 724 724
Если вы хотите, чтобы они добавлялись в исходный фрейм данных, как в приведенном выше примере, вы можете добавить уровень в столбцы и объединить:
sums = df.sum(level=0, axis=1)
sums.columns = pd.MultiIndex.from_product([sums.columns, ['SUM']])
df = pd.concat([df, sums], axis=1)
Похожие вопросы
Связанные вопросы
Новые вопросы
python
Python — это мультипарадигмальный многоцелевой язык программирования с динамической типизацией. Он предназначен для быстрого изучения, понимания и использования, а также обеспечивает чистый и унифицированный синтаксис. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Если у вас есть вопросы о версии Python, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas, NumPy) укажите это в тегах.