pandas 中优先过滤的最佳方式是什么?

Which is the best way to filter with priority in pandas?

我有一个数据框,我需要 filter/clean 遵循优先级列表,例如,在这种情况下,我在维度组中的优先级将是 [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' 作为列并应用一个函数。有没有更简单更优雅的方法来做到这一点?

一种方法是用 NaN 替换错误数据,然后删除这些行,按 id 和组对 df 进行排序,groupby id 并取第一个值:

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