Python groupby с одной строкой, если оператор else - PullRequest
1 голос
/ 23 марта 2020

Я хотел бы применить одну строку if if к группе в моем фрейме данных, но не знаю, как ее отобразить.

Мои данные выглядят так:

    user                in               out location  overlap    Time    overlap_new
0    ron  12/21/2021 10:11  12/21/2016 17:50     home     0  4:19:03      'complete'
1    ron  12/21/2016 13:26  12/21/2016 13:52   office     2  0:25:28      'complete'
2  april   12/21/2016 8:12  12/21/2016 17:27   office     0  8:15:03      'none'
3  april  12/21/2016 18:54  12/21/2016 22:56   office     0  4:02:36      'none'
4   andy   12/21/2016 8:57  12/21/2016 12:15     home     0  2:59:40      'partial'
5   andy   12/21/2016 8:57  12/21/2016 12:15     home     1  2:59:40      'partial'

Я бы хотел, чтобы перекрытие было одним значением, как показано в overlap_new, на основе значения в перекрытии.

Вот мой код:

s = sample.groupby('user')['overlap']
sample.loc[:,'overlap_new'] = s.apply(['partial' if ele == 1 else 'complete' if ele ==2 else 'none' for ele in sample['overlap']])

Как применить групповку к одной строке if else?

1 Ответ

1 голос
/ 23 марта 2020

Используйте GroupBy.transform со значениями теста по Series.any для совпадения хотя бы одного значения в группах:

f = lambda x: 'partial' if (x == 1).any() else 'complete' if (x == 2).any() else 'none'
sample['overlap_new'] = sample.groupby('user')['overlap'].transform(f)
print (sample)
    user                in               out location  overlap     Time  \
0    ron  12/21/2021 10:11  12/21/2016 17:50     home        0  4:19:03   
1    ron  12/21/2016 13:26  12/21/2016 13:52   office        2  0:25:28   
2  april   12/21/2016 8:12  12/21/2016 17:27   office        0  8:15:03   
3  april  12/21/2016 18:54  12/21/2016 22:56   office        0  4:02:36   
4   andy   12/21/2016 8:57  12/21/2016 12:15     home        0  2:59:40   
5   andy   12/21/2016 8:57  12/21/2016 12:15     home        1  2:59:40   

  overlap_new  
0    complete  
1    complete  
2        none  
3        none  
4     partial  
5     partial  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...