2016-09-30 6 views
0

私は、私のようなデータセットを持って、ここでは非常に興味深い問題を抱えている充填データフレームの列が

id, start, end 
    1234 200 400 
    1235 300 500 
    1236 100 900 
    1236 200 1200 
    1236 300 1400 

主な目的:私は、それぞれの同時セッション数をカウントしますid。

at 100, id:1236 has 1 session running 
at 200, id:1236 has 2 sessions 
at 300, id:1236 has 3 sessions 
... 
at 1000m id:1236 has 2 sessions 
etc 

私のソリューション

  • 1とのセッションの開始値とセッションの終了値の間で列を埋めるすべての行に(セッションの最小値と最大値)1から1400まで
  • を列を追加します。
  • 上記の結果を得るには、ユーザーのすべての行を追加します。パンダで

df = pd.read_csv(data+fileName,sep="\t",usecols=[0,1,2],names=['id','start','end']) 

for i in range(0,1440): 
    df[str(i)]=0 

print df.columns 

私は列を追加することができ、各行にセッションの開始と終了の間でこれらの列に1を記入する方法をを考えていました。各行は異なるセッションの開始と終了を持つことができます。

多くのヒントがあれば助かります。私はパンダでそれを試していますが、後で私はワーカーノードにパンダがないApache pysparkに移植する必要があります

+1

パンダでは、 'df [(df.start <= t)&(df.end> = t)]とすることもできます。あなたが希望する時刻を 't 'とすると、groupby(" id ")。count()[' start ']。reset_index()'それに応じて最終列の名前を変更してください。しかし、これをpysparkに移植できるかどうかは分かりません。 – Khris

+0

ありがとう@キリス、確かにいいアプローチ。ここでは、結果を得るために1から1400までループする必要があります。したがって、プロセッサの負荷が高くなり、私のアプローチはメモリを大量に消費します。 – suppoor

答えて

0

パンダであなたもこれを行うことができます:。。[&(df.end> = T)(< = T df.start)] GROUPBY( "ID")(カウントDF)[ 'スタート'] reset_indexを。 ()ここで、tは希望の時刻です。それに応じて最終列の名前を変更してください。しかし、私はこれがpysparkに移植できるのかどうかわかりません。@ Khris