簡體   English   中英

如何有效處理熊貓中的時間序列數據

[英]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,它效率不高且無法正常工作:我嘗試對數據進行排序的每種方式都會導致問題。

  • 我無法按MAC以及日期和時間對其進行排序,因為我需要保留行進方向(按日期和時間進行排序會導致所有方向看起來都朝着正方向)。
  • 僅通過MAC排序就可以使節點保持順序(因為它們按節點順序被推送到文件中)

雖然我可以弄清排序問題,但更大的問題是我是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM