python - 从数据框中删除随机行,直到计数等于某些条件

标签 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

最干净的方法是什么?我当然可以只执行 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/

相关文章:

python - 将数值数据更改为分类数据 - Pandas

python - 在 VSCode 中运行 flask 每次都会导致 HTTPServer.serve_forever(self) 断点

python - 打印数据结构

python - 类型错误 : must be real number, 不是 str

python - 如何迭代股票代码的 DataFrame 列并添加包含股票价格的列?

python - 包含 None 时如何将字典拆分为列

python - 如何根据给定的键列将多个字典组合到一个列表中?

python - 如何使用 pandas 交叉表汇总年度犯罪计数?

python - 如何搜索值是否在数据框中

r - R read.csv导入列名称不正确