2017-11-27 14 views
2

ごとの行数が異なる多種の変換に長いデータフレーム:私は次の形式を取得する必要がありパンダ私は次の形式でパンダのデータセッションIDの持つフレーム、URLおよびタイムスタンプを持つインデックス

SessionId TimeStamp URL 
aa420858 20:24  url1 
aa420858 20:26  url2 
aa420858 20:27  url3 
bb779bc3 18:18  other_url1 
bb779bc3 18:21  other_url2 
bb779bc3 18:24  other_url3 
bb779bc3 18:25  other_url4 
zz920853 20:27  diff_url1 
zz920853 20:28  diff_url2 

SessionId URL1  URL2  URL3  URL4  TimeStamp1 TimeStamp2 TimeStamp3 TimeStamp4 
aa420858 url1  url2  url3     20:26  20:27  20:27  
bb779bc3 other_url1 other_url2 other_url3 other_url4 18:18  18:21  18:24  18:25 
zz920853 diff_url1 diff_url2      20:27  20:28   

セッションごとに多数のURLを事前に知ることはありません。

私はpd.melt、pd.pivot_table、pivot()、unstack()などを使用しようとしましたが、成功しませんでした。誰かが最善の方法をアドバイスしてもらえますか?また、タイムスタンプの差を使ってページの時間を取得することは可能でしょうか?

ありがとうございました!

答えて

4

pivot_table + concat

df1=df.pivot_table(index='SessionId',columns=df.groupby('SessionId').cumcount(),values='TimeStamp',aggfunc='sum').\ 
     add_prefix('TimeStamp_') 

df2=df.pivot_table(index='SessionId',columns=df.groupby('SessionId').cumcount(),values='URL',aggfunc='sum').\ 
     add_prefix('URL_') 


pd.concat([df2,df1],1).reset_index() 
Out[209]: 
    SessionId  URL_0  URL_1  URL_2  URL_3 TimeStamp_0 \ 
0 aa420858  url1  url2  url3  None  20:24 
1 bb779bc3 other_url1 other_url2 other_url3 other_url4  18:18 
2 zz920853 diff_url1 diff_url2  None  None  20:27 
    TimeStamp_1 TimeStamp_2 TimeStamp_3 
0  20:26  20:27  None 
1  18:21  18:24  18:25 
2  20:28  None  None 

Psと。あなたは1からIDが必要な場合...あなたは、

df['DIFF']=df.groupby('SessionId').TimeStamp.apply(lambda x :pd.to_datetime(x).diff().dt.total_seconds()/60) 

df3=df.dropna() 
df3.pivot_table(index='SessionId',columns=df3.groupby('SessionId').cumcount(),values='DIFF',aggfunc='sum').add_prefix('diff') 
Out[241]: 
      diff0 diff1 diff2 
SessionId      
aa420858  2.0 1.0 NaN 
bb779bc3  3.0 3.0 1.0 
zz920853  1.0 NaN NaN 
+0

グレート時間のdf.groupby('SessionId').cumcount().add(1)

DIFFに感謝を.add(1)を追加することができます!スタンプ間の時間差を取得して各U​​RLに時間を持たせる簡単な方法でしょうか?あなたが期待される出力を示す場合 – ibarant

+0

@ibarantは私が – Wen

+0

:-)を助けることができると思います '\t TimeStamp1 \t TimeStamp2 \t TimeStamp3セッションID \t TimeStamp4'' bb779bc3 'aa420858 \t' ' 'zz920853 \t \t – ibarant

関連する問題