GroupBy рассчитывать на неделю в пандах с другими столбцами - PullRequest
1 голос
/ 30 сентября 2019

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

Sector   RaisedDate   Inspector_ID    Priority  
SE1      02-Aug-2019  ID1             High
SE2      04-Aug-2019  ID1             Low
SE2      06-Aug-2019  ID2             Medium
SE1      12-Aug-2019  ID1             High
SE2      11-Aug-2019  ID1             Low
SE1      13-Aug-2019  ID2             High
SE1      18-Aug-2019  ID1             Medium
SE2      21-Aug-2019  ID1             Medium
SE2      20-Aug-2019  ID2             High
SE1      23-Aug-2019  ID1             High
SE1      25-Aug-2019  ID1             Low
SE2      29-Aug-2019  ID2             High
SE1      25-Aug-2019  ID1             Low
SE1      25-Aug-2019  ID2             High

Из вышесказанного я хотел бы подготовить нижеприведенный кадр данных

Sector  #_Week1  #_Week2  #_Week3  #_Week4   #_Week5   No_of_High   No_of_low
SE1     1        2        1        4         0         5            2
SE2     2        1        2        0         1         2            2        

где # _Week1= Количество несчастных случаев, зарегистрированных на неделе 1 (с 01 августа 2019 года по 07 августа 2019 года включительно)

# _ Week2 = Число несчастных случаев, зарегистрированных на неделе 2 (с 8 августа 2019 года по 14 августа 2019 года)включительно)

# _ Week3 = Количество несчастных случаев, зарегистрированных на неделе 3 (с 15 августа 2019 года по 21 августа 2019 года включительно)

# _ Week4 = Количество несчастных случаев, зарегистрированных на неделе 4 (22- Авг-2019 - 28 августа-2019 включительно)

# _ Week5 = Количество несчастных случаев, зарегистрированных на неделе 3 (с 29 августа-2019 по 31 августа 2019 года включительно)

No_of_High =Общее количество аварий с высоким приоритетом в этом секторе для всех данных.

No_of_Low = Общее количество аварий с низким приоритетом в этом секторе для всех данных.

Для этого я попробовал приведенные ниже коды, а это неработа

df.set_index('RaisedDate').groupby(pd.Grouper(freq='Weekly')).Sector.count()

1 Ответ

2 голосов
/ 30 сентября 2019

Использование слов @Parth и добавление "Sector" к groupby():

print(df.set_index('RaisedDate').groupby([
    'Sector',
    pd.Grouper(freq='7D'),
]).Sector.count().unstack())

RaisedDate  2019-08-02  2019-08-09  2019-08-16  2019-08-23
Sector                                                    
SE1                  1           2           1           4
SE2                  2           1           2           1

Получает вас немного ближе к тому, что вы хотите. Затем вы можете переименовать столбцы, чтобы они соответствовали вашему выводу.

Я также заметил, что у меня есть значения 4 и 1 на моей неделе 4 и нет недели 5. Не уверен, что это проблемадля вас?


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

# store the weekly groups
date = df.groupby([
    'Sector',
    pd.Grouper(key='RaisedDate', freq='7D')
]).Sector.count().unstack()


# rename columns
date.columns = [f'week{i}' for i in range(1, len(date.columns)+1)]

# store the priority groups
prio = (df.groupby([
    'Sector',
    'Priority'
]).Priority.count().unstack().drop(columns=[
    'Medium',
]))

# join them
print(date.join(prio))

        week1  week2  week3  week4  High  Low
Sector                                       
SE1         1      2      1      4     5    2
SE2         2      1      2      1     2    2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...