Как я могу отфильтровать фрейм данных в соответствии с приоритетом на основе значений столбцов с помощью Python? - PullRequest
1 голос
/ 08 июля 2019

У меня есть фрейм данных, содержащий имя и приоритет профессии 1,2 и 3. Я хочу отфильтровать фрейм данных в соответствии с приоритетом.Первый директор, если он попадает в первый столбец, должен остановиться, иначе продолжить другие столбцы.Второй актер, если он попадает в первый столбец, должен остановиться, в противном случае продолжить другие столбцы

Входной фрейм данных:

       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

1 Ответ

1 голос
/ 08 июля 2019

Сначала определяется категориальный порядок вашей профессии.Предполагается, что столбцы упорядочены, как показано.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...