2016-09-30 102 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列添加到1400(會話的最小值和最大值),以所有行
  • 填寫會話初始值和會話結束值之間的列1
  • 然後添加用戶的所有行,以獲得上述結果。

在大熊貓

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)]。 groupby(「id」)。count()['start']。reset_index()'其中't'是你想要的時間。相應地重命名最後一列。但我不知道這是否可以通過pyspark移植。 – Khris

+0

謝謝@Kris,的確是一個很好的方法。在這裏我將不得不從1到1400循環來獲得結果,因此處理器密集型,我的方法看起來內存密集。 – suppoor

回答

0

在熊貓你也可以這樣做:。DF [(df.start < = T)&(df.end> = T)] GROUPBY( 「ID」)數() '開始'] reset_index。 ()其中t是你想要的時間。相應地重命名最後一列。但我不知道這是否可以通過pyspark移植。@ Khris