【问题标题】:How to map pandas results after pivot_table aggregation?如何在 pivot_table 聚合后映射熊猫结果?
【发布时间】:2018-09-03 16:06:49
【问题描述】:

我有一些这样通过的测试数据:

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

如何通过保持数据透视表格式原样将映射函数应用于我的结果?

【问题讨论】:

  • 你能包含一个虚拟的期望输出吗?
  • 是的,我会...非常感谢

标签: python pandas group-by pivot-table map-function


【解决方案1】:

使用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

【讨论】:

  • 很好的解决方案,非常感谢。
猜你喜欢
  • 2020-03-19
  • 1970-01-01
  • 1970-01-01
  • 2019-06-28
  • 2022-12-16
  • 2020-01-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多