Python / Pandas, считать конкретные значения на основе нескольких значений - PullRequest
0 голосов
/ 28 сентября 2019

Использование Python / Pandas и заданное имя-значение (Боб), как мне указать value_count по заданию и состоянию, а также по месяцам.Начальная df:

enter image description here

Вывод для Боба должен выглядеть примерно так: *

enter image description here

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

Я могу получить эту информацию по отдельности, используя .loc и value_counts (), но не все сразу.Статистика Grouby не является конкретной.Есть идеи???

Ответы [ 2 ]

0 голосов
/ 29 сентября 2019

Я надеялся получить одну таблицу, но смог подобраться достаточно близко, используя методы groupby и два .count ().Я понял, что мне нужно сначала отфильтровать информационный кадр, чтобы получить только то значение, которое я хотел (Боб).Это может показаться очевидным, но я новичок.Спасибо всем за помощь.

df1 = df[df['Name'] == 'Bob']
grp1 = df1.groupby(['Month', 'Job Code']) 
grp1.count()

grp2 = df1.groupby(['Month', 'State']) 
grp2.count()
0 голосов
/ 29 сентября 2019

Я добавил одну строку (на июнь) в ваш тестовый фрейм данных:

   Name State Job Code Month
0   Bob    CA        A   APR
1   Joe    CA        B   APR
2  Mary    AZ        C   MAY
3   Bob    CA        D   MAY
4   Bob    NV        C   MAY
5   Bob    CA        D   MAY
6   Bob    CA        D   JUN

Причина заключается в том, чтобы показать, что способ, которым я предоставлял сортировку по календарю, Месяц (вместов алфавитном порядке) работает нормально.

Чтобы обеспечить указанную сортировку по календарю, начните с:

df.Month = pd.Categorical(df.Month, ['JAN', 'FEB', 'MAR', 'APR',
    'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC'])

Затем почти вся обработка может быть выполнена в следующей инструкции:

res = df.query('Name == "Bob"').drop(columns=['Name'])\
    .set_index('Month').stack().reset_index(name='val')\
    .groupby(['Month', 'level_1', 'val']).size()\
    .sort_index(ascending=[True, False, True]).droplevel(1)

Эта инструкция довольно длинная (включает в себя несколько шагов), поэтому, чтобы понять ее, запустите каждый шаг отдельно и посмотрите промежуточные результаты.

Я писал «почти все» раньше, потому что на данный момент в MultiIndex нет необходимостиимена столбцов.Чтобы очистить их, запустите:

res.index.names = ['', '']

И окончательный результат:

APR  CA    1
     A     1
MAY  CA    2
     NV    1
     C     1
     D     2
JUN  CA    1
     D     1
dtype: int64

Обратите внимание, что данные для ИЮНЬ равны после МАЙ , как и должно быть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...