我有一个数据框,其中包含我输入到 Python 中的 ML 库的数据。我拥有的数据分为 5 个不同的任务:t1、t2、t3、t4、t5。我现在每项任务的数据都是不均匀的,为了简化这里的事情,这是一个例子。
task, someValue
t1, XXX
t1, XXX
t1, XXX
t1, XXX
t2, XXX
t2, XXX
在上面的情况下,我想删除任务标签为“t1”的随机行,直到“t1”的数量与“t2”的数量相等 所以代码运行后应该是这样的:
task, someValue
t1, XXX
t1, XXX
t2, XXX
t2, XXX
最干净的方法是什么?我当然可以只执行 for 循环和 if 条件并使用随机数并计算每次迭代的出现次数,但该解决方案不会非常优雅。当然一定有一种方法可以使用数据框的功能吗?到目前为止,这就是我得到的:
def equalize_rows(df):
t = df['task'].value_counts()
mininmum_occurance = min(t)
最佳答案
您可以计算 dataFrame 中任务的最小数量,然后使用 groupby
+ head
获取每个任务的前 N 行。
v = df['task'].value_counts().min()
df = df.groupby('task', as_index=False).head(v)
df
task someValue
0 t1 XXX
1 t1 XXX
4 t2 XXX
5 t2 XXX
关于python - 从数据框中删除随机行,直到计数等于某些条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50003791/