Pandas: учет расхождений при вводе и значений отдельных столбцов в табличных сводках - PullRequest
0 голосов
/ 08 октября 2018

Я только начал изучать, как использовать Pandas, и я пытаюсь работать с довольно большим набором данных (5000 строк и 15 столбцов).Данные имеют такой формат (чтобы дать пример проблем, с которыми я сталкиваюсь, и потому что я хочу понять, как это сделать - фактические данные не имеют никакого отношения к завершению).

ID#    Firing Date     Age     State     Position       Cause
1      2011-07-03      29      NY        Salesman       Layoff
2      2014-03-20      25      AK        salesman       layoff
3      2004-08-11      42      CA        Receptionist   Tardiness
4      07/18/12        41      CA        Mechanic       Unknown
5      06/30/12        24      NY        Salesman       Harassment
6      05/20/12        31      NY        Mechanic       Harassment

IМне нужно использовать такие данные для создания табличных сводок, но после того, как я в течение нескольких часов просматривал документацию для панд и несколько похожих вопросов, я все еще терялся.

Мне кажется, я понял, как анализировать даты, просто используя эту функцию read_csv (),

my_df = pd.read_csv('my_dataset.csv',
                    parse_dates = ['Hiring Date'])

Однако я не могу понять, как создать сводкуэто учитывает значение каждой строки в определенном столбце.Если в этом столбце указано значение «Продавец» или «Продавец», мне нужно сравнить его с датой найма (по годам), с третьим столбцом для всех значений «Механик», а затем с четвертым столбцом, в котором перечислены всеоставшиеся типы позиций для каждого года.

Так что в приведенных выше примерах данных я хотел бы иметь вывод, который выглядит примерно так:

Year      Salesman      Mechanic      Other      Total
2004      0             0             1          1
2011      1             0             0          1
2012      1             2             0          3
2014      1             0             0          1

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

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 08 октября 2018

Настройка

Это всего лишь нормализация данных

dct = {
  'Firing': pd.to_datetime(df.Firing).dt.year,
  'State': df.State.str.title()
}

Теперь используется pivot_table и заканчивается суммированиепо первой оси:

out = (df.assign(**dct).pivot_table(
          index='Firing', columns='State', aggfunc='size', fill_value=0))

out.assign(total=out.sum(1))

State  Mechanic  Receptionist  Salesman  total
year
2004          0             1         0      1
2011          0             0         1      1
2012          2             0         1      3
2014          0             0         1      1

Вы также можете заменить pivot_table на crosstab (используя тот же код суммирования после):

out = pd.crosstab(df.Firing.dt.year, df.State.str.title())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...