我有一张像这样的数据
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。我怎么能这么做?
预期产出:
fff = pd.DataFrame({'group': ['a','a','a','b','b','b','b'], 'value': [1,2, np.nan, 1,2,3,4]})发布于 2020-07-27 11:05:08
您可以检查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发布于 2020-07-27 11:04:49
用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发布于 2020-07-27 11:20:11
另一种选择:
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.0https://stackoverflow.com/questions/63113947
复制相似问题