Python 以特定列(标签)的比率切片数据帧
我有以下数据框:Python 以特定列(标签)的比率切片数据帧,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有以下数据框: var1 var2 label 0 ".." ".." 0 1 ".." ".." 0 2 ".."
var1 var2 label
0 ".." ".." 0
1 ".." ".." 0
2 ".." ".." 1
3 ".." ".." 0
...
601 ".." ".." 1
标签
列中的比率1
和0
分别为0.6和0.4
我如何才能以这样的方式对该数据帧进行切片,即观察数量现在占总数的30%(601),但标签中的比率保持不变?例如:
var1 var2 label
0 ".." ".." 1
1 ".." ".." 0
2 ".." ".." 0
3 ".." ".." 0
...
181 ".." ".." 0
label
中的比率1
和0
仍分别为0.6和0.4
我尝试了以下操作:df=df.groupby('label')。应用(lambda x:x.sample(frac=0.3,random\u state=1)。重置索引(drop=True))
。这使标签
的比率保持不变。但是,它返回一种奇怪的索引格式:
var1 var2 label
label
0 0 ".." ".." 0
1 ".." ".." 0
2 ".." ".." 0
3 ".." ".." 1
...
181 ".." ".." 1
一种方法是groupby().head()
:
如果要随机采样,可以使用熊猫1.1+的groupby().sample()
:
df.groupby('label').sample(n=N)
或者您可以在groupby().head()之前洗牌数据:
更新如果您的意思是希望将标签的比率保持为0.6:0.4
,则groupby().sample()
将使您接近原始比率:
df.groupby('label').sample(frac=0.2)
接近。检查这篇文章的更新。@jxpython movereset\u index(drop=True)
在groupby().apply()之外。你是对的。谢谢你的修复!标签现在已订购。它们首先以0开头。您对此有何解释?请在删除之前尝试sort_index
(df.groupby('label')。应用(lambda x:x.sample(frac=0.3))。排序_index(level=1)。重置_index(drop=True))
df.sample(frac=1).groupby('label').head(N)
df.groupby('label').sample(frac=0.2)