Преобразуйте панды DataFrame из широкого в длинный и считайте вхождения уникального значения - PullRequest
0 голосов
/ 15 декабря 2018

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

df_larceny
CATEGORY    INCIDENTYEAR    INCIDENTMONTH       
LARCENY     2009            1
LARCENY     2009            1
LARCENY     2009            1
.............................
.............................
LARCENY     2016           11
LARCENY     2016           12
LARCENY     2016           12
LARCENY     2016           12

после преобразования он должен выглядеть следующим образом.

COUNT   INCIDENTYEAR    INCIDENTMONTH       
234     2009            1
453     2009            2
847     2009            3
943     2009            4
958     2009            5
.............................
.............................
324     2016           11
372     2016           12
241     2016           12
412     2016           12

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

Я пробовал этот урок раньше, к сожалению, без всякой удачи.

Я также пробовал различные методы с помощью value_counts (), но, к сожалению, безуспешно.

В конце из чистого отчаяния я сделал это вручную для другого DataFrame, который выглядел примерно так

jan09 = df["CATEGORY"].loc['2009-01-01':'2009-02-01'].value_counts().sum()
jan10 = df["CATEGORY"].loc['2010-01-01':'2010-02-01'].value_counts().sum()
jan11 = df["CATEGORY"].loc['2011-01-01':'2011-02-01'].value_counts().sum()
jan12 = df["CATEGORY"].loc['2012-01-01':'2012-02-01'].value_counts().sum()
jan13 = df["CATEGORY"].loc['2013-01-01':'2013-02-01'].value_counts().sum()
jan14 = df["CATEGORY"].loc['2014-01-01':'2014-02-01'].value_counts().sum()
jan15 = df["CATEGORY"].loc['2015-01-01':'2015-02-01'].value_counts().sum()
jan16 = df["CATEGORY"].loc['2016-01-01':'2016-02-01'].value_counts().sum()

jan_df = [jan09,jan10,jan11,jan12,jan13,jan14,jan15,jan16]`

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

1 Ответ

0 голосов
/ 15 декабря 2018

Может быть, что-то вроде этого:

df_larceny[df_larceny['CATEGORY'] == 'LARCENY'].groupby(['INCIDENTYEAR', 'INCIDENTMONTH']).count().reset_index()
...