在pandas中优先过滤的最佳方法是哪种?

时间:2015-02-26 10:59:48

标签: python pandas

我有一个数据帧,我需要在一个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'作为列并应用函数。有更简单更优雅的方法吗?

1 个答案:

答案 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