假设我有这个数据帧,我想根据下面的条件创建它的一个子集。
df=pd.DataFrame({'file':[1205,2897,1205,1205,4312,1322,1242,52,2897,111],
'department':[finance,finance,IT,marketing,marketing,IT,finance,IT,marketing,IT],
'status':[1,1,1,1,1,1,1,1,1,1],
})
file department status
0 1205 finance 1
1 2897 finance 1
2 1205 IT 1
3 1205 marketing 1
4 4312 marketing 1
5 1322 IT 1
6 1242 finance 1
7 52 IT 1
8 2897 marketing 1
9 111 IT 1
- 如果文件存在finance并存在于IT将其从并保存在it
- 如果文件存在finance营销和它和删除从第一个2,并保持它在它
- 如果文件存在finance营销和从首先将其保存在营销中
- 如果文件存在marketing它和首先从
中删除,并将其保留在it中。
预期结果:
file department status
0 1205 IT 1
1 2897 marketing 1
2 4312 marketing 1
3 1322 IT 1
4 1242 finance 1
5 52 IT 1
6 111 IT 1
使用CategoricalDtype
创建一个有序集合,如'finance' < 'marketing' < 'IT'
:
cat = pd.CategoricalDtype(['finance', 'marketing', 'IT'], ordered=True)
out = (df.astype({'department': cat}).sort_values('department')
.drop_duplicates('file', keep='last').sort_index())
print(out)
# Output
file department status
2 1205 IT 1
4 4312 marketing 1
5 1322 IT 1
6 1242 finance 1
7 52 IT 1
8 2897 marketing 1
9 111 IT 1