Группировать по месяцам, неделям, используя столбец даты - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть датафрейм со следующими столбцами:

user,dates,quantity,location

а я подумываю о полезной группе по процедурам сделать.

 pd.to_numeric(x['quantity'], errors='coerce').groupby(x['user']).sum().reset_index()

дает это:

    user      quanity
0   user_01    8900.0
1   user_02       0.0
2   user_03       0.0
3   user_04     232.0
4   user_05      21.0
5   user_06     110.0
6   user_07     240.0
7   user_08   20500.0

Как я могу сделать это, включая location и dates?

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

Примечание: столбец дат имеет тип объекта

пример данных

     dates      user   quantity  location
0   2018-09-03  user_01 23          GR
1   2018-09-03  user_01 -           GR
2   2018-09-03  user_02 3           SW
3   2018-09-03  user_03 -           POR
4   2018-09-03  user_04 222         PAN
5   2018-09-03  user_04 -           PAN

1 Ответ

0 голосов
/ 13 сентября 2018

Вы можете группировать по умножению столбцов и агрегировать sum:

x['quantity'] = pd.to_numeric(x['quantity'], errors='coerce')
df = x.groupby(['dates','user','location'], as_index=False)['quantity'].sum()
print (df)
        dates     user location  quantity
0  2018-09-03  user_01       GR      23.0
1  2018-09-03  user_02       SW       3.0
2  2018-09-03  user_03      POR       0.0
3  2018-09-03  user_04      PAN     222.0

РЕДАКТИРОВАТЬ: Вы можете использовать Grouper по MS начало месяца - отметьте псевдонимы смещения :

x['dates'] = pd.to_datetime(x['dates'])

x['quantity'] = pd.to_numeric(x['quantity'], errors='coerce')
df = (x.groupby([pd.Grouper(key='dates', freq='MS'),'user','location'])['quantity']
       .sum()
       .reset_index())

print (df)
       dates     user location  quantity
0 2018-09-01  user_01       GR      23.0
1 2018-09-01  user_02       SW       3.0
2 2018-09-01  user_03      POR       0.0
3 2018-09-01  user_04      PAN     222.0

Или используйте month или day или year:

df = x.groupby([x['dates'].dt.month,'user','location'])['quantity'].sum().reset_index()
print (df)
   dates     user location  quantity
0      9  user_01       GR      23.0
1      9  user_02       SW       3.0
2      9  user_03      POR       0.0
3      9  user_04      PAN     222.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...