首页 > 解决方案 > 使用python进行平衡采样

问题描述

我有一个 df 有 23 列和 8124 行。在第一列(命名类型)中只有两个值“e”或“p”。现在我需要创建两个不同的df:

重要的是,所有这些行必须由原始 df 随机选择(不允许重复)。

编辑:元素 e 和 p 的行数不够,所以我不得不牺牲一些距离

标签: pythondataframesampling

解决方案


这取决于您在完整数据集中拥有的“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]

推荐阅读