我有一个数据框,其中包含我在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
最干净的方法是什么?我当然可以做循环,如果条件和使用随机数并计算每次迭代的出现次数,但该解决方案不会很优雅。当然必须有一种方法来使用数据帧的功能?到目前为止,这就是我得到的:
def equalize_rows(df):
t = df['task'].value_counts()
mininmum_occurance = min(t)
答案 0 :(得分:2)
您可以计算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