假设我有一个 Dataframe ,其中有很多缺失的数据:
df = pd.DataFrame({'id': ['a','a','b','b','b','c','d','e','e','e'],
'q1': [1,1,np.NaN,np.NaN,0,np.NaN,1,np.NaN,1,0],
'q2': ['low',np.NaN,np.NaN,'high','low','high','high',np.NaN,np.NaN,'low'],
'q3': [np.NaN,1,np.NaN,1,0,0,1,0,np.NaN,np.NaN]
})
它看起来像这样:
id q1 q2 q3
0 a 1.0 low NaN
1 a 1.0 NaN 1.0
2 b NaN NaN NaN
3 b NaN high 1.0
4 b 0.0 low 0.0
5 c NaN high 0.0
6 d 1.0 high 1.0
7 e NaN NaN 0.0
8 e 1.0 NaN NaN
9 e 0.0 low NaN
我希望创建一个新的 Dataframe ,其中仅包含每个id
中的1行,但该行是最完整的(NaN的示例最少),但如果它们同样完整,则为当前排序顺序中的第一个匹配项
理想的输出是一个新的 Dataframe :
id q1 q2 q3
0 a 1.0 low NaN
1 b 0.0 low 0.0
2 c NaN high 0.0
3 d 1.0 high 1.0
4 e 0.0 low NaN
我可以使用df.isnull().sum(axis=1)
计算每行中NA的数量,但不确定如何使用它来选择总和最小的行,尤其是当id
有两个以上的条目时
3条答案
按热度按时间4xrmg8kj1#
您可以使用Surrogate数据行,根据计数进行排序,并使用
groupby
进行筛选。g6baxovj2#
这就是我要做的,
drop_duplicates
,您可以使用.drop('Notnullvalue', 1)
来删除Notnullvalue
7d7tgy0s3#
受@COLDSPEED的启发,我有这样一个解决方案,注意
na_position='last'
是sort_values
中的默认设置。