Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Dask中的分组df滤波_Python_Pandas_Dask - Fatal编程技术网

Python Dask中的分组df滤波

Python Dask中的分组df滤波,python,pandas,dask,Python,Pandas,Dask,关于熊猫的类似问题: 行动 基于应用于groupby列以外的列的表达式消除组 问题 未为分组数据帧实现筛选器 尝试过 Groupby和apply用于消除某些组,这些组会返回索引错误,因为apply函数应该总是返回某些内容 In [16]: def filter_empty(df): if not df.label.values.all(4): return df df_nonempty = df_norm.groupby('hash').apply(filter_emp

关于熊猫的类似问题:

行动 基于应用于groupby列以外的列的表达式消除组

问题 未为分组数据帧实现筛选器

尝试过 Groupby和apply用于消除某些组,这些组会返回索引错误,因为apply函数应该总是返回某些内容

In [16]:
def filter_empty(df):
    if not df.label.values.all(4):
        return df

df_nonempty = df_norm.groupby('hash').apply(filter_empty, meta=meta)

In [17]:
len(df_nonempty.hash.unique())
...

<ipython-input-16-6da6d9b6c069> in filter_empty()
      1 def filter_empty(df):
----> 2     if not df.label.values.all(4):
      3         return df
      4 
      5 df_nonempty = df_norm.groupby('hash').apply(filter_empty, meta=meta)

/opt/conda/lib/python3.5/site-packages/numpy/core/_methods.py in _all()
     39 
     40 def _all(a, axis=None, dtype=None, out=None, keepdims=False):
---> 41     return umr_all(a, axis, dtype, out, keepdims)
     42 
     43 def _count_reduce_items(arr, axis):

ValueError: 'axis' entry is out of bounds
我认为您可以先+然后针对
系列
(类似于,但也未在
dask
中实现),最后通过以下方式进行过滤:


编辑:

我认为这里没有必要
groupby

df_notall4 = df[df.C != 4].drop_duplicates(subset=['A','D'])['D'].compute()
但如果真的需要:

def filter_4(x):
        return x[x.C != 4]

df_notall4 = df.groupby('A').apply(filter_4, meta=df).D.unique().compute()
print (df_notall4)
0    1
1    3
2    0
3    5
Name: D, dtype: int64

感谢@jezrael,我检查了我的实现并创建了以下解决方案(请参见我提供的示例)

导致

In [8]:
df_notall4.D.unique().compute()
Out[8]:
0    1
1    3
2    5
3    0
Name: D, dtype: object

如果您根据大小进行过滤(如我提供的参考问题中所述),这是非常有用的。但是,您也知道如何将此应用于其他表达式。像;-伪-
如果group.label.values.all(4)
Hmmm,可以添加一些示例吗?因为不确定是否理解
group.label.values.all(4)
-尤其是
4
。感谢@jezrael的帮助!我添加了一个示例问题在
4
中,您不能使用它。是否需要-
df.B.values.all()
?是否可以添加所需的输出?因为
如果不是df.B.values.all(4)
是错误的。您是否尝试重置groupby的_index(),然后过滤dask数据帧?
df_notall4 = df[df.C != 4].drop_duplicates(subset=['A','D'])['D'].compute()
def filter_4(x):
        return x[x.C != 4]

df_notall4 = df.groupby('A').apply(filter_4, meta=df).D.unique().compute()
print (df_notall4)
0    1
1    3
2    0
3    5
Name: D, dtype: int64
df_notall4 = []
for d in list(df[df.C != 4].D.unique().compute()):
    df_notall4.append(df.groupby('D').get_group(d))

df_notall4 = dd.concat(df_notall4, interleave_partitions=True)
In [8]:
df_notall4.D.unique().compute()
Out[8]:
0    1
1    3
2    5
3    0
Name: D, dtype: object