Python 按筛选标准筛选样本

Python 按筛选标准筛选样本,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个像下面这样的数据框 d = {'var1': [1, 2, 3, 4], 'var2': [5, 6, 7, 8], 'class': ['a', 'a', 'c', 'b']} df = pd.DataFrame(data=d) df var1 var2 class 0 1 5 a 1 2 6 a 2 3 7 c 3 4 8 b 我想能够改变班级栏的比例。例如,我想将

我有一个像下面这样的数据框

d = {'var1': [1, 2, 3, 4], 'var2': [5, 6, 7, 8], 'class': ['a', 'a', 'c', 'b']}
df = pd.DataFrame(data=d)
df
    var1   var2  class
0     1     5      a
1     2     6      a
2     3     7      c
3     4     8      b
我想能够改变班级栏的比例。例如,我想将
a
类随机抽样50%,但其他类的行数保持不变。结果将是:

df
    var1   var2  class
0     1     5      a
1     3     7      c
2     4     8      b

如何做到这一点。

我首先使用这种方法将数据帧分为
df_选择
df_剩余
。 然后,我将
df_选择
减少了
REMOVE_PERCENTAGE
,并再次将结果数据帧与
df_剩余
合并

将numpy导入为np
作为pd进口熊猫
d={'var1':[1,2,3,4],'var2':[5,6,7,8],'class':['a','a','c','b']}
df=pd.DataFrame(数据=d)
删除0到1之间的百分比=0.5
df=df.set_索引(['class'])
df_selection=df.loc['a']\
.reset_index()
df_剩余=df.drop('a')\
.reset_index()
行到行移除=int(移除百分比*len(df\u selection.index))
drop\u index=np.random.choice(df\u selection.index,rows\u to\u remove,replace=False)
df_selection_reduced=df_selection.drop(drop_索引)
df_结果=pd.concat([df_选择减少,df_剩余])\
.reset_索引(drop=True)
打印(df_结果)