我有一个数据帧,我需要在一个priorty列表后过滤/清理,例如,在这种情况下,我在维度组中的优先级将是[A,B,C],这意味着对于我要检查的每个ID A组有一个值,如果没有,我检查是否有B组或C组的值
id group value
1 A :
1 B 2
1 C 7
2 A 1
2 B 3
2 C 5
3 A :
3 B :
3 C 2
我的过滤结果应该是:
id group value
1 B 2
2 A 1
3 C 2
我可以按ID分组并为每个组应用一个函数来定义哪个数据是正确的。我可以将数据帧拆开并放入' group'作为列并应用函数。有更简单更优雅的方法吗?
答案 0 :(得分:2)
一种方法是用NaN
替换错误的数据,然后删除这些行,按id和group,groupby id对df进行排序,并取第一个值:
In [361]:
df.value = df.value.replace(':', np.NaN)
df
Out[361]:
id group value
0 1 A NaN
1 1 B 2
2 1 C 7
3 2 A 1
4 2 B 3
5 2 C 5
6 3 A NaN
7 3 B NaN
8 3 C 2
In [376]:
df.dropna().sort(['id','group']).groupby('id').first()
Out[376]:
group value
id
1 B 2
2 A 1
3 C 2