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
我有一个数据框,我需要 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