[英]How to Efficiently Process Time-Series Data in Pandas
我有代表給定節點經過的時間的數據集。 數據以以下格式存儲在每個節點的一個CSV文件中: node name, datetime, irrelevant field, mac address
我正在將它們讀入Pandas中的一個DataFrame中:
dfs = [pd.read_csv(f, names=CSV_COLUMNS, parse_dates=[1]) for f in files]
return pd.concat(dfs)
我想做的是找到一個節點與另一個節點上的MAC地址出現之間的時間差。 現在,我正在遍歷生成的DataFrame,它效率不高且無法正常工作:我嘗試對數據進行排序的每種方式都會導致問題。
雖然我可以弄清排序問題,但更大的問題是我是Pandas的新手,我敢打賭,在Pandas中有正確的方法可以做到這一點。 在處理結束時,我想要的是一個數據集,該數據集顯示了MAC 直接在其之間行進的每對節點的行進時間( timediff.total_seconds()
或類似數據)。 最后一點很重要:對於節點為A,B和C的布局,大多數行程將為AB或BC(或相反),但是某些MAC可能不會在B處注冊,而是會從A變為C在某些節點上出現MAC但從不出現在另一個節點上的孤兒也可能是孤兒。
如果數據框按日期時間對每個mac address
排序,則可以執行以下操作:
grb = df.groupby('mac address')
df['origin'] = grb['node name'].transform(pd.Series.shift, 1)
df['departure time'] = grb['datetime'].transform(pd.Series.shift, 1)
旅行時間為:
df['travel time'] = df['departure time'] - df['datetime']
如果節點名稱為字符串,則路徑為:
df['path'] = df['origin'] + '-' + df['node name']
編輯 :假設旅行時間不能為負,這可能會更快:
df.sort(['mac address', 'datetime'], inplace=True)
df['origin'] = df['node name'].shift(1)
df['departure time'] = df['datetime'].shift(1)
# correct for the places where the mac addresses change
idx = df['mac address'] != df['mac address'].shift(1)
df.loc[idx, 'origin'] = np.nan
df.loc[idx, 'departure time'] = np.nan
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.