У меня есть некоторые данные тестов, пройденных так:
import numpy as np
import pandas as pd
data = [[np.random.choice(['Tmax', 'Tmin']), np.random.choice(['USA', 'FRA', 'AUS']),
np.random.randint(1,4), np.random.choice(['Class A', 'Class B']),np.random.randint(4)] for i in range(1000)]
df = pd.DataFrame(data, columns=['temp', 'region', 'method', 'slice', 'pass'])
Я повернул кадр данных с помощью функции np.mean
следующим образом:
pv = pd.pivot_table(df,
index=['temp', 'method'],
values=['pass'],
columns=['slice', 'region'],
aggfunc=(np.mean))
Значения переменной 'pass'
- это среднее значение пройденных тестов в виде десятичных дробей, таких как 0,45, 1,5, 3,2 ..., однако я хочу отобразить эти результаты с помощью следующей функции
def results_mapper(v):
num_tests = np.round(v)
if num_tests < 2:
return 1
elif num_tests == 2:
return 2
else:
return 3
Я пытался отобразить результаты, используя pv.map(results_mapper)
или map(results_mapper, pv)
, но безуспешно.
Номера образцов:
pv
выходные значения могут быть как 0.5, 1.1, 1.49, 1.6, 1.9, 2.1, 2.9, 3.5
будет сопоставлен с 1, 1, 1, 2, 2, 2, 3, 3
Как я могу применить функцию отображения к своим результатам, сохранив формат сводной таблицы как есть?