2017-06-15 122 views
0

我正在使用熊貓來處理大型時間序列數據集。我想在數據幀中的行之間添加行如果連續兩個指數之間的差值大於5根據條件在熊貓數據框中插入行

實際:

  a result 
Date     
1497544649 1  1.0 
1497544652 9  1.0 
1497544661 9  NaN 

預計:

  a result 
Date     
1497544649 1  1.0 
1497544652 9  1.0 
1497544657 9  0 
1497544661 9  NaN 

我以前DIFF( )上索引獲得兩個連續索引之間的差異,但不知道如果差異大於5時如何插入記錄。

import pandas as pd 

df = pd.DataFrame([{"Date": 1497544649,"a":1, "result": 1}, 
        {"Date": 1497544652,"a": 9, "result": 1}, 
        {"Date": 1497544661,"a": 9, "result": 1}]) 
df.set_index("Date", inplace=True) 

df.index.to_series().diff().fillna(0).to_frame("diff") 

就如何實現這一目標的任何指針將不勝感激

謝謝

回答

0

你有一個良好的開端。添加一個差異列以允許更簡單的過濾。

獲取與您的規則匹配的數據框的索引並插入您的行。

df['diff'] = df.index.to_series().diff().fillna(0).to_frame("diff") 

matches = df[df['diff'] > 5].index.tolist() 


for i in matches: 
    diff = df.loc[i]['diff'] 
    interval = round(diff/2) # index some place in the middle 
    df.loc[i-interval] = [0, 0, 0, diff-interval] # insert row before matched index 
    df.loc[i]['diff'] = interval # may not need to update the interval 

df.sort_index(inplace=False) # pandas appends by default so we should sort this 

del df.diff # we can remove this