Групповая и агрегированная операция в Pandas Dataframe

У меня есть кадр данных Pandas:

     Date     Type     Section      Status   
--------------------------------------------
0     1-Apr    Type1       A         Present
1     1-Apr    Type2       A         Absent
2     1-Apr    Type2       A         Present
3     1-Apr    Type1       B         Absent
4     2-Apr    Type1       A         Present
5     2-Apr    Type2       C         Present
6     2-Apr    Type2       C         Present    

Я хотел бы сгруппировать DF в немного другом формате:

     Date     Type     A_Pre  A_Abs   B_Pre   B_Abs    C_Pre   C_Abs   
------------------------------------------------------------------------------
0     1-Apr    Type1       1    0       0       1        0        0 
1              Type2       1    1       0       0        0        0
2     2-Apr    Type1       1    0       0       0        0        0         
3              Type2       0    0       0       0        1        1         

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

Любая помощь будет принята с благодарностью.


person Quazi Farhan    schedule 11.05.2014    source источник
comment
это почти дубликат этого: stackoverflow.com/questions/23580009/   -  person Jeff    schedule 11.05.2014
comment
Спасибо за ссылку, почитал. Если я получу свой ответ, я обновлю его здесь. Большое спасибо.   -  person Quazi Farhan    schedule 11.05.2014
comment
на самом деле ваш вопрос может быть проще, попробуйте: df.groupby(..)['Status'].apply(pd.get_dummies)   -  person Jeff    schedule 11.05.2014
comment
Почему ты не спросил меня напрямую, чувак?   -  person Woody Pride    schedule 11.05.2014


Ответы (1)


Во-первых, я бы создал столбцы, которые вы хотите агрегировать, заполненные нулями и единицами, а затем использовал бы groupby и сделал бы простую сумму значений...

Мне не удалось попробовать это, но я думаю, что следующее должно работать:

Present = ['A_Pre',  'B_Pre',  'C_Pre' ]
Absent = ['A_Abs',  'B_Abs',  'C_Abs' ]

for string in Present:
    DF[string] = pd.Series([1 if stat == 'Present' and sect == string[0] else 0 
                            for stat, sect in zip(DF['Status'], DF['Section'])], 
                            index = DF.index)
for string in Absent:
    DF[string] = pd.Series([1 if stat == 'Absent' and sect == string[0] else 0 
                            for stat, sect in zip(DF['Status'], DF['Section'])], 
                            index = DF.index)

DF.groupby(['Date', 'type']).agg(sum)
person Woody Pride    schedule 11.05.2014