【问题标题】:changing a dataframe with time and correponding activities into counts of the activities per day将具有时间和相应活动的数据框更改为每天的活动计数
【发布时间】:2025-12-24 06:15:06
【问题描述】:
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

我首先按注册 ID 进行分组。 我是。考虑使用 group iterrow

【问题讨论】:

    标签: python pandas time


    【解决方案1】:

    IIUC,DataFrame.melt + DataFrame.pivot_tablepd.factorizeSeries.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 
    

    【讨论】:

      最近更新 更多