首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何只有当熊猫中的所有元素都是NAs在一个群中时才丢弃NAs?

如何只有当熊猫中的所有元素都是NAs在一个群中时才丢弃NAs?
EN

Stack Overflow用户
提问于 2020-07-27 11:02:15
回答 4查看 58关注 0票数 2

我有一张像这样的数据

代码语言:javascript
复制
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]})

只有当group中的所有 values都是NAs时,我才想通过group删除Nas。我怎么能这么做?

预期产出:

代码语言:javascript
复制
fff = pd.DataFrame({'group': ['a','a','a','b','b','b','b'], 'value': [1,2, np.nan, 1,2,3,4]})
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-07-27 11:05:08

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

代码语言:javascript
复制
fff = fff[(~fff['value'].isna()).groupby(fff['group']).transform('any')]

输出:

代码语言:javascript
复制
  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
票数 4
EN

Stack Overflow用户

发布于 2020-07-27 11:04:49

isna()创建一个布尔序列,然后在fff['group']上分组,transformall,然后筛选出(排除)返回True的值

代码语言:javascript
复制
c = fff['value'].isna()
fff[~c.groupby(fff['group']).transform('all')]

代码语言:javascript
复制
  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
票数 3
EN

Stack Overflow用户

发布于 2020-07-27 11:20:11

另一种选择:

代码语言:javascript
复制
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"]]

输出:

代码语言:javascript
复制
    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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63113947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档