如何根据给定的类\标签分布值对 pandas 数据框或 graphlab sframe 进行采样,例如:我想对具有标签\类列的数据框进行采样以选择行,以便平等地获取每个类标签,从而具有相似的频率对于每个类标签对应一个均匀分布的类标签。或者最好是根据我们想要的类别分布获取样本。
+------+-------+-------+
| col1 | clol2 | class |
+------+-------+-------+
| 4 | 45 | A |
+------+-------+-------+
| 5 | 66 | B |
+------+-------+-------+
| 5 | 6 | C |
+------+-------+-------+
| 4 | 6 | C |
+------+-------+-------+
| 321 | 1 | A |
+------+-------+-------+
| 32 | 432 | B |
+------+-------+-------+
| 5 | 3 | B |
+------+-------+-------+
given a huge dataframe like above and the required frequency distribution like below:
+-------+--------------+
| class | nostoextract |
+-------+--------------+
| A | 2 |
+-------+--------------+
| B | 2 |
+-------+--------------+
| C | 2 |
+-------+--------------+
上面的代码应该根据第二帧中给定的频率分布从第一个数据帧中提取行,其中频率计数值在 nostoextract 列中给出,以给出采样帧,其中每个类最多出现 2 次。如果找不到足够的类来满足所需的数量,则应忽略并继续。生成的数据帧将用于基于决策树的分类器。
正如评论员所说,采样的数据帧必须包含 nostoextract 相应类的不同实例?除非给定的类没有足够的示例,在这种情况下,您只需采用所有可用的示例。
您可以将第一个数据帧拆分为特定于类的子数据帧,然后从中随意采样吗?
i.e.
dfa = df[df['class']=='A']
dfb = df[df['class']=='B']
dfc = df[df['class']=='C']
....
然后,在 dfa、dfb、dfc 上拆分/创建/过滤后,根据需要从顶部选择一个数字(如果数据帧没有任何特定的排序模式)
dfasamplefive = dfa[:5]
或者使用之前评论者描述的样本方法直接随机抽样:
dfasamplefive = dfa.sample(n=5)
如果这满足您的需求,剩下要做的就是自动化该过程,输入要从您拥有的控制数据帧中采样的数字,作为包含所需样本数量的第二个数据帧。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)