Python 3.x 如何使用python根据基于列值的优先级过滤数据帧?
我有一个包含名称和职业优先级1、2和3的数据框。 我想根据优先级过滤数据帧。 如果第一个控制器进入第一列,它应该停止,否则继续其他列。 第二个参与者若进入第一列,则应停止,否则继续其他列 输入数据帧:Python 3.x 如何使用python根据基于列值的优先级过滤数据帧?,python-3.x,pandas,numpy,Python 3.x,Pandas,Numpy,我有一个包含名称和职业优先级1、2和3的数据框。 我想根据优先级过滤数据帧。 如果第一个控制器进入第一列,它应该停止,否则继续其他列。 第二个参与者若进入第一列,则应停止,否则继续其他列 输入数据帧: primaryName prof1 prof2 prof3 0 jordan belfort producer actor writer 1 martin scorsese producer director actor 2
primaryName prof1 prof2 prof3
0 jordan belfort producer actor writer
1 martin scorsese producer director actor
2 leonardo dicaprio actor producer writer
3 jonah hill actor producer writer
输出数据帧
primaryName
0 martin scorsese
1 leonardo dicaprio
2 jonah hill
它首先定义了你职业的分类顺序。这假设列的顺序如图所示
cat = (pd.Categorical(['director','actor', 'writer', 'producer'], ordered=True)
.reorder_categories(['director','actor', 'writer', 'producer'])
)
# stack to be able to sort by column name
# then sort_values
new_df = (test_df.stack()
.astype(cat).cat.codes
.reset_index()
.sort_values([0,'level_1'])
.groupby('primaryName', as_index=False)
.first()
)
# get the correct order by merge:
(test_df.merge(new_df, on='primaryName')
.sort_values([0,'level_1'])['primaryName']
)
输出:
1 martin scorsese
2 leonardo dicaprio
3 jonah hill
0 jordan belfort
Name: primaryName, dtype: object
这让我有点困惑。你能稍微澄清一下吗?也许能给你的测试数据增加一点复杂度,得到预期的结果。