首页 > 解决方案 > Python平衡多指标数据

问题描述

我有一个结构类似于示例中的数据框:

import pandas as pd
import numpy as np

df = {'class': [1, 1, 1, 2, 2, 1, 1, 3, 3, 3, 2, 2],
      'letter': ['a', 'a', 'a', 'b', 'b', 'c', 'c', 'd', 'd', 'd', 'e', 'e'],
      'value1': [0.97, 0.43, 0.67, 0.02, 0.75, 0.34, 0.43, 0.36, 0.40, 0.92, 0.95, 0.64],
      'value2': [0.16,  0.83, 0.62, 0.2, 0.48, 0.36, 0.67, 0.91, 0.9, 0.75, 0.5, 0.99],
      }
df = pd.DataFrame(df).set_index(['number', 'letter'])

print(df)
               value1  value2
class  letter                
1      a         0.97    0.16
       a         0.43    0.83
       a         0.67    0.62
2      b         0.02    0.20
       b         0.75    0.48
1      c         0.34    0.36
       c         0.43    0.67
3      d         0.36    0.91
       d         0.40    0.90
       d         0.92    0.75
2      e         0.95    0.50
       e         0.64    0.99

我想根据相同类别组的最小出现次数(N)随机平衡它(在示例中,类别 3,仅发生 N=1 次)。在这种情况下,我的预期结果可能是这样的:

               value1  value2
class  letter                
1      a         0.97    0.16
       a         0.43    0.83
       a         0.67    0.62
2      e         0.95    0.50
       e         0.64    0.99
3      d         0.36    0.91
       d         0.40    0.90
       d         0.92    0.75

其中每个类出现 N 次(在这种情况下为 1 次)并且要丢弃的类/字母组合的选择是随机的(但保持字母值的一致性)。

我试过使用RandomUnderSampler,但它不适用于多索引。我为类似问题找到的所有可能的解决方案都是在一个类的所有条目中随机抽样,忽略类字母分组。

有什么想法/经验吗?

标签: pythondataframemulti-indexbalance

解决方案


推荐阅读