例子:
row_number |id |firstname | middlename | lastname |
0 | 1 | John | NULL | Doe |
1 | 1 | John | Jacob | Doe |
2 | 2 | Alison | Marie | Smith |
3 | 2 | NULL | Marie | Smith |
4 | 2 | Alison | Marie | Smith |
我试图找出如何按id分组,然后为每个groupby获取具有最少空值的行,删除包含最少空值的任何额外行是很好的(例如,删除第4行,因为它将第2行与id=2的最少空值绑定在一起)
这个例子的答案是行1和行2
最好是ansi sql,但是如果你能想到一种方法的话,我可以翻译其他语言(比如python和pandas)
编辑:
增加了一行以防打领带。
最佳答案
如果你想做这只熊猫,你可以这样做:
df[df.assign(NC = df.isnull().sum(1)).groupby('id')['NC'].transform(lambda x: x == x.min())]
输出:
row_number id firstname middlename lastname
1 1 1 John Jacob Doe
2 2 2 Alison Marie Smith
对于断路器:
添加行:
df.loc[4,['row_number','id','firstname','middlename','lastname']] = ['4',2,'Mary','Maxine','Maxwell']
然后使用
groupby
、transform
和idxmin
:df[df.index == df.assign(NC = df.isnull().sum(1)).groupby('id')['NC'].transform('idxmin')]
输出:
row_number id firstname middlename lastname
1 1 1 John Jacob Doe
2 2 2 Alison Marie Smith
关于python - 如何在groupby中选择空值最少的组?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49391838/