我有一些像這樣通過的測試數據:import numpy as npimport pandas as pddata = [[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), or來映射結果,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如何通過保持數據透視表格式不變將映射函數應用于我的結果?
1 回答

慕尼黑5688855
TA貢獻1848條經驗 獲得超2個贊
用 np.vectorize
func = np.vectorize(results_mapper)
pv.values[:,:] = func(pv.values)
輸出
pass
slice Class A Class B
region AUS FRA USA AUS FRA USA
temp method
Tmax 1 1.0 1.0 2.0 2.0 2.0 1.0
2 1.0 2.0 1.0 1.0 1.0 1.0
3 1.0 2.0 2.0 2.0 2.0 2.0
Tmin 1 2.0 1.0 2.0 2.0 1.0 2.0
2 2.0 2.0 1.0 2.0 1.0 2.0
3 2.0 1.0 1.0 2.0 2.0 1.0
添加回答
舉報
0/150
提交
取消