根据条件

时间:2016-08-22 04:58:08

标签: python dataframe dask

假设我有一个包含4个字段的表

table (id, alpha, beta, delta, gamma)

然后我想根据以下标准选择行

  1. 所有4个字段(alphabetadeltagamma)均不为空
  2. 对于字段的每个组合(alphabetadeltagamma),它至少有7行

    SELECT alpha, beta, delta, gamma
    FROM table
    GROUP BY alpha, beta, delta, gamma
    HAVING COUNT(*) >= 7
    
  3. 从每组中随机选择7到10行

  4. 所以我可以通过一系列(或大型复杂的)SQL查询来实现这一点,但如果我想使用dask集合或pandas数据帧,这可能吗?

    我目前的尝试是通过dask.bag,显然效率不高

    bag = (db.read_text('/path/to/the/jsonlines')
           .map(ujson.loads)
           .filter(lambda x: x['alpha'] and x['beta'] and x['delta'] and x['gamma'])
           .groupby(lambda x: (x['alpha'], x['beta'], x['delta'], x['gamma']))
           .filter(lambda x: len(x[1]) > 7))
    

    编辑:数据库预计会不断增长。 jsonlines文件的集合是我需要为任务包含的数据的当前快照(即我不想要新添加的数据)。

    有更好的方法吗?

0 个答案:

没有答案