python - 使用python进行平衡采样
问题描述
我有一个 df 有 23 列和 8124 行。在第一列(命名类型)中只有两个值“e”或“p”。现在我需要创建两个不同的df:
- 第一个 df 必须包含 5686 行(大约 70% 的行),同时“e”和“p”的数量必须相同(e 的 50% 和 p 的 50%)。
- 第二个 df 必须包含剩余的行。
重要的是,所有这些行必须由原始 df 随机选择(不允许重复)。
编辑:元素 e 和 p 的行数不够,所以我不得不牺牲一些距离
解决方案
这取决于您在完整数据集中拥有的“e”和“p”的比例。如果 'e' 或 'p' 中的任何一个都小于 2843(5686 的 50%),你将无法实现它,假设你满足了这个条件,你可以试试这个:
filtered_data = df.groupby(['Col_with_e_and_p']).apply(lambda x: x.sample(n=2843)).reset_index(drop = True)
对于剩余的数据,您可以使用此解决方法,因为在对原始索引进行分组后:
bool_position = df.merge(filtered_data, how='left', indicator=True)['_merge'].str.contains('left_only')
remaining_df = df[bool_position]
推荐阅读
- ethereum - 迁移 2_deploy_contracts 无效或在 Object.run() 处不采用任何参数
- html - 删除 GitHub 页面托管网站上的尾部斜杠
- ios - 如何在没有 iMessage 的情况下发送短信
- jquery - 分页通过jQuery恢复删除的行
- google-apps-script - 使用逗号分隔数据的列中的下拉列表 Google 表格
- reactjs - React Redux 与使用全局挂钩?哪个更好?
- javascript - 将 java 脚本数组复制到另一个数组
- windows - 使用 windows api 计算字母并打印数字数组
- html - 如何增加将导航栏更改为汉堡图标的大小
- reactjs - 为什么我的 IF 不返回组件
?