5我有一個如下所示的資料框:
| 姓名 | 地點 | 時間 |
|---|---|---|
| 手動的 | BCN | 2022 年 3 月 10 日晚上 11:23:13 |
| 手動的 | BCN | 2022 年 3 月 10 日晚上 11:38:47 |
| 自動的 | 馬德里 | 2022 年 3 月 10 日晚上 11:40:32 |
| 手動的 | BCN | 2022 年 3 月 10 日晚上 11:39:47 |
| 手動的 | BCN | 2022 年 3 月 11 日上午 12:44:47 |
它由名稱列、地點和時間組成。我正在尋找的是計算名稱和地點相等且實體之間的時間少于 20 分鐘的位置。在這種情況下,輸出將是 Manual,bcn1 ->3 次,因為第 5 行距離其他兩行有一個小時的路程。資料按時間排序。
我嘗試的是使用名稱和地點進行分組,然后將差異應用于時間,但無濟于事。
df['Time'] = pd.to_datetime(df['Time'])
g=( df.groupby(['site','Name'])['Time'].diff().ne(pd.Timedelta(minutes=20))
.groupby(df['site','Ppath']).cumsum() )
groups = df.groupby(['Site',g])['Time']
new_df = df.assign(count = groups.transform('size'))
這將回傳所有值的計數,而不是滿足 timedelta 的值。該檔案本身非常大,有多個名稱和站點位置。
非常感謝
編輯1。為了澄清我正在查看值對,因此在這種情況下,第一行與第二行。然后是第二個和第三個,以此類推。我正在探索一個按名稱和站點過濾的解決方案。
謝謝
uj5u.com熱心網友回復:
IIUC,嘗試:
df["Time"] = pd.to_datetime(df["Time"])
df = df.sort_values("Time", ignore_index=True)
output = (df.groupby(["Name", "Site"])["Time"].apply(lambda x: x.diff()
.dt
.total_seconds()
.div(60)
.fillna(0)
.le(20)
.sum()
)
)
>>> output
Name Site
Automatic Madrid 1
Manual BCN 3
Name: Time, dtype: int64
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/448022.html
