Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.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 如何仅在pandas中groupby中的所有元素都是NAs时删除NAs_Python_Python 3.x_Pandas - Fatal编程技术网

Python 如何仅在pandas中groupby中的所有元素都是NAs时删除NAs

Python 如何仅在pandas中groupby中的所有元素都是NAs时删除NAs,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有一个像这样的数据框 import pandas as pd import numpy as np fff = pd.DataFrame({'group': ['a','a','a','b','b','b','b','c','c'], 'value': [1,2, np.nan, 1,2,3,4, np.nan, np.nan]}) 仅当所有值都是组内的NAs时,我才想按组删除NAs。我怎么能这么做 预期产出: fff = pd.DataFrame({'group': ['a','a','

我有一个像这样的数据框

import pandas as pd
import numpy as np

fff = pd.DataFrame({'group': ['a','a','a','b','b','b','b','c','c'], 'value': [1,2, np.nan, 1,2,3,4, np.nan, np.nan]})
仅当所有
都是
组内的NAs时,我才想按
删除NAs。我怎么能这么做

预期产出:

fff = pd.DataFrame({'group': ['a','a','a','b','b','b','b'], 'value': [1,2, np.nan, 1,2,3,4]})

isna()
创建一个布尔序列,然后在
fff['group']
上分组,用
all
进行
transform
,然后过滤(排除)返回
True

c = fff['value'].isna()
fff[~c.groupby(fff['group']).transform('all')]


您可以检查
value
中的
nan
并使用
groupby()。any()

输出:

  group  value
0     a    1.0
1     a    2.0
2     a    NaN
3     b    1.0
4     b    2.0
5     b    3.0
6     b    4.0
    group   value
0   a       1.0
1   a       2.0
2   a       NaN
3   b       1.0
4   b       2.0
5   b       3.0
6   b       4.0
另一种选择:

fff["cases"] = fff.groupby("group").cumcount()
fff["null"] = fff["value"].isnull()
fff["cases 2"] = fff.groupby(["group","null"]).cumcount()
fff[~((fff["value"].isnull()) & (fff["cases"] == fff["cases 2"]))][["group","value"]]
输出:

  group  value
0     a    1.0
1     a    2.0
2     a    NaN
3     b    1.0
4     b    2.0
5     b    3.0
6     b    4.0
    group   value
0   a       1.0
1   a       2.0
2   a       NaN
3   b       1.0
4   b       2.0
5   b       3.0
6   b       4.0

对已提供答案的补充:仅保留所有值均为真的组,并使用
结果
变量过滤
fff
数据帧

result = fff.groupby("group").value.all().index.tolist()

fff.query("group == @result")