Python сгруппировать несколько столбцов и преобразовать pandas ошибка ключа - PullRequest
0 голосов
/ 24 марта 2020

У меня возникли проблемы с применением преобразования к групповке из 2 столбцов в Pandas. Я пробовал несколько вещей, ссылающихся на похожие варианты использования.

Я смотрю на группы по дате и пользователю и выполняю преобразование для столбца флага, говоря, если 'nan', то 0 еще 1. Мои данные выглядят так:

    user     date        Flag
0    ron  12/21/2019      1 
1    ron  12/22/2019      2  
2  april   12/21/2016    nan  
3  april  12/23/2016      1  
4   andy   12/21/2016    nan  

Вот то, что я настроил, что логично для меня, но я получаю ключевую ошибку.

s = master['Flag'].eq('nan').groupby(master['date','user']).transform('any')
master.loc[:,'attendance'] = s.map({True:0,False: 1}) 
KeyError: ('date', 'user')

1 Ответ

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

После master['Flag'].eq('nan') у вас есть только тип серии. Затем вы вызываете .groupby и должны передать столбцы для группировки (но там нет таких столбцов).

Если я правильно понял всю задачу, вот код:

# step 1
master['Flag'] = master['Flag'] == 'nan'
master

Out[1]:

    user    date        Flag
0   ron     12/21/2019  False
1   ron     12/22/2019  False
2   april   12/21/2016  True
3   april   12/23/2016  False
4   andy    12/21/2016  True

# step 2

s = master.groupby(['date','user']).agg('any')
s

Out[2]:

                    Flag
    date    user    
12/21/2016  andy    True
            april   True
12/21/2019  ron     False
12/22/2019  ron     False
12/23/2016  april   False


# step 3

s['attendance'] = s['Flag'].map({True:0,False: 1})
s

Out[3]:

                    Flag    attendance
    date    user        
12/21/2016  andy    True    0
            april   True    0
12/21/2019  ron     False   1
12/22/2019  ron     False   1
12/23/2016  april   False   1

..или короткая версия

master.assign(flg = master['Flag'] == 'nan').groupby(['date','user'])[['flg']].agg('any')['flg'].map({True:0,False: 1}).to_frame()
...