在python和pandas中使用条件创建数据帧的子集



假设我有这个数据帧,我想根据下面的条件创建它的一个子集。

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

最新更新