从数据帧中删除随机行,直到count等于某些条件

时间:2018-04-24 14:07:47

标签: python pandas dataframe

我有一个数据框,其中包含我在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)

1 个答案:

答案 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