2017-09-24 76 views
0

多箱我有兩隻大熊貓dataframes(實際dataframes大得多):分佈值轉換成大熊貓

events = pd.DataFrame({'Begin':[959.44, 1222.82, 2217.59], 'End':[978.00,1240.41,2799.43]}) 

markers = pd.DataFrame({'Marker': [0, 256.0, 700, 975.33, 1188.2, 1230.88, 2500, 3120.22]}) 

我要細分的事件數據框爲標誌,這我試圖像對待垃圾箱,也就是[0,256.0],[256,700]等等......試圖結束標記數據框中的另一行,該行記錄了在該容器中觀察到累計事件總數的方式。每個事件可能以多個倉位結束。例如,959.44至978.00事件應該在700-975.33箱中計算15.89(978.00-975.33),其餘的應計入975.33,1188.2。

我一直在嘗試使用pandas.cut來標記數據框,但我不知道如何解釋多個bin。這是做這件事的最好方法嗎?

+1

還添加預期的輸出。 – Zero

+0

僅僅從單純的解釋中就很難預測輸出。如果您提供預期的產出,那將非常好。 – Dark

回答

1

IIUC可以使用間隔索引來獲取範圍以後使用得祿來獲得標記值即

markers['Begin'] = markers.shift() 
nm = markers.sort_index(1).dropna() 
nm.index = pd.IntervalIndex.from_arrays(nm['Begin'], nm['Marker']) 


events['mark'] = events['Begin'].apply(lambda x : nm.iloc[nm.index.get_loc(x)]['Marker']) 
events['new'] = events['mark'] - events['Begin'] 

輸出:

 
    Begin  End  mark  new 
0 959.44 978.00 975.33 15.89 
1 1222.82 1240.41 1230.88 8.06 
2 2217.59 2799.43 2500.00 282.41 

說明

創建間隔通過移動Marker和丟棄nan的索引,即

然後
nm.index = pd.IntervalIndex.from_arrays(nm['Begin'], nm['Marker']) 
 
        Begin Marker 
(0.0, 256.0]   0.00 256.00 
(256.0, 700.0]  256.00 700.00 
(700.0, 975.33]  700.00 975.33 
(975.33, 1188.2] 975.33 1188.20 
(1188.2, 1230.88] 1188.20 1230.88 
(1230.88, 2500.0] 1230.88 2500.00 
(2500.0, 3120.22] 2500.00 3120.22 

搜索在區間指數開始事件的使用get_loc後獲得即

 
    Begin  End  mark 
0 959.44 978.00 975.33 
1 1222.82 1240.41 1230.88 
2 2217.59 2799.43 2500.00 

獲得的指標標記值獲得指數從begin後來減去mark得到新列

希望它有幫助。