Получить первую строку в каждой иерархической серии pandas - PullRequest
0 голосов
/ 21 апреля 2020

Это мой Dataframe

import pandas as pd

df = pd.DataFrame({
    "Gender": ["M", "F", "M", "M", "M",  "F", "F", "F", "F", "F", "F"],
    "Work-code": ["N1", "N3", "N1", "N1", "X15", "N3", "N3", "N3", "N3", "N1", "N3"],
    "Accident-type-code": ["1.1","1.2", "1.1","1.3","1.5","1.3","1.1","1.1","1.1", "1.1", "1.3"]
})

Для анализа этих данных я использую groupby:

data = df.groupby(["Gender", "Work-code"])["Accident-type-code"].value_counts()

Вот что я получаю:

Gender  Work-code  Accident-type-code
F       N1         1.1                   1
        N3         1.1                   3
                   1.3                   2
                   1.2                   1
M       N1         1.1                   2
                   1.3                   1
        X15        1.5                   1

Мне нужна только первая строка каждой внутренней группы (самая частая группа для данной внешней группы), например:

Gender  Work-code  Accident-type-code
F       N1         1.1                   1
        N3         1.1                   3
M       N1         1.1                   2
        X15        1.5                   1

На самом деле, я делаю это, потому что хочу сделать двумерный распределение частот, но я не знаю ни одной функции или библиотеки в python, чтобы сделать это.

Ответы [ 2 ]

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

хорошо, так что вы можете попробовать это. сначала, groupby reset_index:

data_raw = df.groupby(["Gender", "Work-code"])["Accident-type-code"].value_counts().reset_index(name="counts")

, а затем

data_raw.groupby(['Gender','Work-code'],as_index=True).first()

Мой вывод:

Это моментальный вывод

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

Есть некоторые изменения, которые вам нужно внести в раздел группового входа.

data = df.groupby(["Gender", "Work-code"])["Accident-type-code"].value_counts().reset_index(name="counts")

data.head(1)

Теперь у вас есть обычная таблица, вы можете использовать циклы, чтобы довольно легко это выяснить.

...