Я пытаюсь найти индекс максимальных значений в нескольких столбцах в многоиндексном кадре данных Pandas.
Kommune Upplands Vallentuna... Kiruna
Year Party
1973 M 0.9 29.2 ... 20
KD 15 10 ... 2
MP 1.1 4 ... 5
V 6 7 ... 8
SD NaN NaN ... NaN
L 10.1 13.5 ... 8.8
1976 M 1.8 29.2 ... 20
KD 16 10 ... 2
MP 10 4 ... 5
V 15 7 ... 8
SD NaN NaN ... NaN
L 11.9 15 ... 18
... ... ... ... ... ...
... ... ... ... ... ...
2014 M 28 22 ... 29
KD 4.5 13 ... 5
MP 11 8 ... 9
V 1.9 5 ... 10
SD 20 10 ... 5
L 19 25 ... 1
Желаемый результат
Kommune Upplands Vallentuna... Kiruna
Year
1973 KD M ... M
1976 V M ... M
... ... ... ... ...
2014 M L ... M
Я пробовал использовать groupby
(как было предложено в предыдущем сообщении о мультииндексе - получение максимальных значений из pandas multiindex dataframe), но он возвращает кортеж для каждой позиции.
Kommune Upplands Vallentuna ... Kiruna
Year
1973 (1973, KD) (1973, M) ... (1973, M)
1976 (1976, V) (1976, M) ... (1976, M)
... ... ... ... ...
2014 (2014, M) (2014, L) ... (2014, M)
Как получить только второй элемент из каждого кортежа? Или есть более эффективный способ найти индексы?
Похоже, вам нужно
df.stack().sort_values().groupby(level=[0,2]).tail(1).reset_index(level=1).Party.unstack()
Out[544]:
Upplands Vallentuna Kiruna
Year
1973 KD M M
1976 KD M M
Как получить только второй элемент из каждого кортежа?
Одним из решений является извлечение второго элемента каждого tuple
через pd.DataFrame.applymap
:
df = pd.DataFrame([[(1, 2), (3, 4)], [(5, 6), (7, 8)]])
res = df.applymap(lambda x: x[1])
print(res)
0 1
0 2 4
1 6 8
Или используйте функциональную альтернативу:
from operator import itemgetter
res = df.applymap(itemgetter(1))