У меня есть фрейм данных, который выглядит следующим образом (если хотите, код внизу:
A B C D E
Year Category
1980 Alpha 100 800 10 15 1.2350
Bravo 200 700 20 25 2.3550
Charlie 300 600 30 35 3.3600
Delta 400 500 40 45 4.4448
1981 Alpha 500 400 50 55 5.5000
Bravo 600 300 60 65 6.0000
Charlie 700 200 70 75 7.2000
Delta 800 100 80 85 8.0000
Для каждого года я пытаюсь получить сумму (и среднее значение) столбцов AD для всех строк, где значение E больше, чем медиана для этого года.
Таким образом, для 1980 года только Charl ie & Delta квалифицируются как имеющие значение в столбце E, которое больше чем Медиана для этого года. Следовательно, результат для столбца А должен быть ... сумма = 300 + 400 = 700 ... среднее = среднее (300, 400) = 350
Самое близкое, что я могу получить здесь, это использовать groupby / median
df.groupby(['Year']).median()
... но тогда я не совсем уверен, что делать с выходами. Это дает мне медианы для каждого года, но я не могу затем легко связать эти результаты с моим исходным кадром данных.
Код кадра данных:
data = {'A': [100,200,300,400,500,600,700,800],
'B': [800,700,600,500,400,300,200,100],
'C': [10,20,30,40,50,60,70,80],
'D': [15,25,35,45,55,65,75,85],
'E': [1.235,2.355,3.36,4.4448,5.5,6,7.2,8]}
idx = pd.MultiIndex.from_product([[1980, 1981],['Alpha','Bravo', 'Charlie','Delta']], names=['Year','Category'])
df = pd.DataFrame(data, index=idx, columns=['A', 'B', 'C', 'D', 'E'])