Как назначить номера строк на основе уровня в pandas данных? - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть следующий код:

from pandas import DataFrame
import pandas as pd

data = {'City': ['NY', 'NY', 'Arizona'], 'Doctor': ['Dr. Prof. Vera', 'Dr. Prof. Vera', 'Dr. Martin'], 'Type': ['Checked', 'Checked', 'Ordered'], 'Covid-Patient': ['yes', 'no', 'no']}
df = DataFrame(data).set_index(['City', 'Doctor', 'Type'])
df['Dr-Nr.'] = pd.Series(df.groupby(['Doctor']).cumcount()+1)

Что приводит к:

enter image description here

Но я хочу индивидуально номер Doctor в новом столбце Dr-Nr.. enter image description here

По-видимому, группировка по уровню Doctor, похоже, не дает эффекта. Любая помощь приветствуется!

1 Ответ

0 голосов
/ 07 апреля 2020

Вы можете rank() уровень индекса Doctor:

df['Dr-Nr.'] =df.assign(d_=df.index.get_level_values('Doctor'))['d_'].rank(method='dense').astype(int)

Порядок индексации здесь будет алфавитным, поэтому:

                               Covid-Patient  Dr-Nr.
City    Doctor         Type
NY      Dr. Prof. Vera Checked           yes       2
                       Checked            no       2
Arizona Dr. Martin     Ordered            no       1
...