изменение кадра данных со временем и сопоставление действий в счет действий в день - PullRequest
1 голос
/ 18 апреля 2020
enroll_id   time    event source
   1     2014-12-11 view  server
   1     2014-12-13 discuss server
   1     2014-12-12 view  browser
   2     2014-12-11 access browser
   1     2014-12-14 discuss  server
   2     2014-12-13 view    browser

Я хотел бы преобразовать его во что-то похожее на это

enroll_id view_d1 access_d1 discuss_d1 browser_day1 server_day1 view_d2 access_d2 discuss_d2 browser_day2 server_day2 view_d3 access_d3 discuss_d3 browser_day3 server_day3
1            1        NaN      NaN       NaN           1            1           NaN        NaN    
2            2          1        2       Nan

Я начал с группировки по enroll_id. Я. думаю об использовании группы iterrow

1 Ответ

1 голос
/ 18 апреля 2020

IIU C, DataFrame.melt + DataFrame.pivot_table. pd.factorize и Series.map, чтобы легко получить имена столбцов после поворота.

df2 = (df.rename(columns = {'source' : 'day', 'event' : 'd'})
         .assign(time=pd.factorize(df['time'])[0]+1)
         .melt(['enroll_id', 'time']))

new_df = (df2.pivot_table(index='enroll_id',
                          columns=['value', 'variable', 'time'],
                          aggfunc='size')
             .sort_index(level=[2, 1, 0],
                         ascending=[True, True, False],
                         axis=1))

new_df = (new_df.set_axis([f'{x}_{y}{z}' for x, y, z in new_df.columns], axis=1)
               .reset_index())
print(new_df)

   enroll_id  view_d1  access_d1  server_day1  browser_day1  view_d2  \
0          1      1.0        NaN          1.0           NaN      NaN   
1          2      NaN        1.0          NaN           1.0      1.0   

   discuss_d2  server_day2  browser_day2  view_d3  browser_day3  discuss_d4  \
0         1.0          1.0           NaN      1.0           1.0         1.0   
1         NaN          NaN           1.0      NaN           NaN         NaN   

   server_day4  
0          1.0  
1          NaN 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...