условный подсчет нескольких столбцов при агрегировании значений по столбцам времени (датафреймы Python) и процентам по общему количеству вхождений - PullRequest
0 голосов
/ 13 января 2019

Ну, это сложно, я объясню это прямо на примере

Допустим, у нас есть этот фрейм данных

ID Week  Alarm1   Alarm2
0   1    false    false
1   1     true    false
2   1    false    true
4   2    false    false
5   2     true    true
6   2    false    true
7   2    false    true
8   3     true    true
9   3     true    true

А теперь я хочу агрегировать их по неделям, сохраняя столбцы alarm1 и alarm2 и считая те, которые были истинными:

Week Alarm1 Alarm2
 1     1      1
 2     1      3
 3     2      2 

Пробовал что-то вроде: data.groupby(["week","Alarm1","Alarm2"]).size(), но, как и ожидалось, я получаю только таблицу со всеми возможными ложными / истинными параметрами)

Бонусный дополнительный вопрос : А что, если теперь я хочу%? Неделя 3 имела меньше полных строк, поэтому я хочу, чтобы эти сигналы весили больше. Я хотел бы разделить на лету каждое значение на общее количество строк каждой недели, чтобы получить что-то вроде этого:

Week Alarm1 Alarm2
 1    0.33   0.33
 2    0.25   0.75
 3     1       1 

Спасибо, что уделили время!

Ответы [ 2 ]

0 голосов
/ 13 января 2019

Просто сделай так:

data.groupby('Week').sum()

Чтобы получить количество истинных значений (помните, что True = 1, False = 0).

Чтобы получить процент, просто выполните:

data.groupby('week').sum()/data.groupby('week').count()
0 голосов
/ 13 января 2019

Для первой части: (если идентификатор не является столбцом, игнорируйте удаление и перейдите к остальной части кода)

>>df.drop('ID',axis=1).replace({True:1, False:0}).groupby('Week').sum().reset_index()
    Week    Alarm1  Alarm2
0   1       1       1
1   2       1       3
2   3       2       2

Для второй части:

df.groupby('Week')['Alarm1','Alarm2'].apply(lambda x: x.sum()/x.count()).reset_index()

    Week    Alarm1  Alarm2
0   1   0.333333    0.333333
1   2   0.250000    0.750000
2   3   1.000000    1.000000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...