仅当所有元素都是大熊猫中的groupby中的NA时,如何删除NA

时间:2020-07-27 11:02:15

标签: 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]})

仅当所有 groupvalue中的Nas时,我才希望将group的NA删除。我该怎么办?

预期输出:

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

4 个答案:

答案 0 :(得分:4)

您可以检查value中是否有nan并使用groupby().any()

fff = fff[(~fff['value'].isna()).groupby(fff['group']).transform('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

答案 1 :(得分:3)

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

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

  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

答案 2 :(得分:2)

另一个选择:

card.model2IV

输出:

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"]]

答案 3 :(得分:1)

已经提供的答案的补充:仅保留所有值均为True的组,并使用fff变量过滤result数据帧。

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

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