本文介紹了如何使用 Pandas 將 DataFrame 按照特定的站點循環(huán)進行拆分,尤其適用于處理公交線路數(shù)據(jù),將包含多個循環(huán)的單條線路數(shù)據(jù)分割成獨立的行程。通過 `groupby` 和 `numpy.array_split` 兩種方法,可以靈活地根據(jù)站點周期性重復的特點,將 DataFrame 分割成多個子 DataFrame,每個子 DataFrame 代表一個完整的行程。
在處理公交線路數(shù)據(jù)時,我們經(jīng)常會遇到需要將包含多個行程的 DataFrame 按照行程進行拆分的情況。例如,一個 DataFrame 包含了某條公交線路一天內(nèi)的所有站點和時間信息,而我們希望將它分割成多個子 DataFrame,每個子 DataFrame 代表一次完整的行程。本文將介紹兩種方法來實現(xiàn)這個目標:使用 groupby 和使用 numpy.array_split。
這種方法的核心思想是,通過比較當前站點與第一個站點是否相同,并使用 cumsum 函數(shù)來生成分組的依據(jù)。每次遇到第一個站點時,分組計數(shù)器就會增加,從而將 DataFrame 分成多個組。
代碼示例:
import pandas as pd df = pd.DataFrame({ "scheduled": ["2023-05-25 13:00", "2023-05-25 13:15", "2023-05-25 13:45", "2023-05-25 14:35", "2023-05-25 14:50", "2023-05-25 15:20"], "stop": ["A", "B", "C", "A", "B", "C"] }) # 將 scheduled 列轉(zhuǎn)換為 datetime 類型 df["scheduled"] = pd.to_datetime(df["scheduled"]) # 創(chuàng)建分組依據(jù) group = df['stop'].eq(df['stop'].iloc[0]).cumsum() # 使用 groupby 進行分組 out = [g for _, g in df.groupby(group)] print(out)
代碼解釋:
輸出結(jié)果:
[ scheduled stop 0 2023-05-25 13:00:00 A 1 2023-05-25 13:15:00 B 2 2023-05-25 13:45:00 C, scheduled stop 3 2023-05-25 14:35:00 A 4 2023-05-25 14:50:00 B 5 2023-05-25 15:20:00 C]
注意事項:
這種方法的核心思想是,首先計算出唯一的站點數(shù)量,然后使用 numpy.array_split 函數(shù)將 DataFrame 按照站點數(shù)量進行分割。
代碼示例:
import pandas as pd import numpy as np df = pd.DataFrame({ "scheduled": ["2023-05-25 13:00", "2023-05-25 13:15", "2023-05-25 13:45", "2023-05-25 14:35", "2023-05-25 14:50", "2023-05-25 15:20"], "stop": ["A", "B", "C", "A", "B", "C"] }) # 將 scheduled 列轉(zhuǎn)換為 datetime 類型 df["scheduled"] = pd.to_datetime(df["scheduled"]) # 計算唯一站點的數(shù)量 n = df['stop'].nunique() # 使用 numpy.array_split 進行分割 out = np.array_split(df, range(n, len(df), n)) print(out)
代碼解釋:
輸出結(jié)果:
[ scheduled stop 0 2023-05-25 13:00:00 A 1 2023-05-25 13:15:00 B 2 2023-05-25 13:45:00 C, scheduled stop 3 2023-05-25 14:35:00 A 4 2023-05-25 14:50:00 B 5 2023-05-25 15:20:00 C]
注意事項:
本文介紹了兩種使用 Pandas 拆分 DataFrame 的方法,分別使用了 groupby 和 numpy.array_split 函數(shù)。選擇哪種方法取決于數(shù)據(jù)的特點和需求。如果站點循環(huán)模式已知,可以使用 groupby 方法;如果已知站點數(shù)量且每個行程站點數(shù)量相同,可以使用 numpy.array_split 方法。在實際應用中,可以根據(jù)具體情況選擇合適的方法,或者結(jié)合兩種方法來實現(xiàn)更復雜的需求。
以上就是Pandas DataFrame 按周期拆分:高效分割公交線路數(shù)據(jù)的詳細內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!
每個人都需要一臺速度更快、更穩(wěn)定的 PC。隨著時間的推移,垃圾文件、舊注冊表數(shù)據(jù)和不必要的后臺進程會占用資源并降低性能。幸運的是,許多工具可以讓 Windows 保持平穩(wěn)運行。
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號