假設 3 個孩子正在比賽,看誰能在幾天內賣出最多的糖果、巧克力棒和餅干。他們在當天 08:15:00(8.15am)開始他們的比賽,并同意將他們的銷售輸入跟蹤器,如下面的資料框所示:
df = pd.DataFrame({
'Name': ['Harvey', 'Khala', 'Gaddy', 'Harvey', 'Khala', 'Gaddy', 'Harvey', 'Khala', 'Gaddy', 'Khala', 'Harvey', 'Gaddy'],
'Timestamp': ['2022-01-01 08:17:23.12', '2022-01-01 08:22:58.76', '2022-01-01 08:19:02.57', '2022-01-01 08:55:43.99','2022-01-01 08:41:23.10', '2022-01-01 09:14:59.99', '2022-01-01 09:15:02.02', '2022-01-01 09:44:43.30','2022-01-01 09:54:23.71', '2022-01-01 10:15:00.00', '2022-01-01 10:15:02.99', '2022-01-01 10:19:43.52'],
'Candy': [2, 1, 3, 3, 5, 4, 6, 6, 4, 10, 9, 14],
'Chocolate Bars': [4, np.nan, 6, 7, 8, 6, 7, 13, 10, 19, 11, 11],
'Cookies': [1, 1, 4, 2, 4, 5, 5, 8, 11, 8, 15, 17]
})
Name Timestamp Candy Chocolate Bars Cookies
0 Harvey 2022-01-01 08:17:23.12 2 4 1
1 Khala 2022-01-01 08:22:58.76 1 NaN 1
2 Gaddy 2022-01-01 08:19:02.57 3 6 4
3 Harvey 2022-01-01 08:55:43.99 3 7 2
4 Khala 2022-01-01 08:41:23.10 5 8 4
5 Gaddy 2022-01-01 09:14:59.99 4 6 5
6 Harvey 2022-01-01 09:15:02.02 6 7 5
7 Khala 2022-01-01 09:44:43.30 6 13 8
8 Gaddy 2022-01-01 09:54:23.71 4 10 11
9 Khala 2022-01-01 10:15:00.00 10 19 8
10 Harvey 2022-01-01 10:15:02.99 9 11 15
11 Gaddy 2022-01-01 10:19:43.52 14 11 17
現在的目的是創建一個新的資料框,以 1 小時間隔捕獲每個孩子的最新銷售(一個小時視窗的示例是 08:15:00.00 - 09:14:59.99)以及他們被捕獲的視窗. 這樣資料框將如下所示:
Name Window Timestamp Candy Chocolate Bars Cookies
1 Harvey 09:15:00.00 2022-01-01 08:55:43.99 3 7 2
2 Khala 09:15:00.00 2022-01-01 08:41:23.10 5 8 4
3 Gaddy 09:15:00.00 2022-01-01 09:14:59.99 4 6 5
4 Harvey 10:15:00.00 2022-01-01 09:15:02.02 6 7 5
5 Khala 10:15:00.00 2022-01-01 09:44:43.30 6 13 8
6 Gaddy 10:15:00.00 2022-01-01 09:54:23.71 4 10 11
7 Khala 11:15:00.00 2022-01-01 10:15:00.00 10 19 8
8 Harvey 11:15:00.00 2022-01-01 10:15:02.99 9 11 15
9 Gaddy 11:15:00.00 2022-01-01 10:19:43.52 14 11 17
uj5u.com熱心網友回復:
我要做的第一件事是將時間戳列轉換為日期時間,以使其更易于使用
import numpy as np
import pandas as pd
df = pd.DataFrame({
'Name': ['Harvey', 'Khala', 'Gaddy', 'Harvey', 'Khala', 'Gaddy', 'Harvey', 'Khala', 'Gaddy', 'Khala', 'Harvey', 'Gaddy'],
'Timestamp': ['2022-01-01 08:17:23.12', '2022-01-01 08:22:58.76', '2022-01-01 08:19:02.57', '2022-01-01 08:55:43.99','2022-01-01 08:41:23.10', '2022-01-01 09:14:59.99', '2022-01-01 09:15:02.02', '2022-01-01 09:44:43.30','2022-01-01 09:54:23.71', '2022-01-01 10:15:00.00', '2022-01-01 10:15:02.99', '2022-01-01 10:19:43.52'],
'Candy': [2, 1, 3, 3, 5, 4, 6, 6, 4, 10, 9, 14],
'Chocolate Bars': [4, np.nan, 6, 7, 8, 6, 7, 13, 10, 19, 11, 11],
'Cookies': [1, 1, 4, 2, 4, 5, 5, 8, 11, 8, 15, 17]
})
df["Timestamp"] = pd.to_datetime(df["Timestamp"])
然后下一步是添加視窗列
# Get window
window_start = pd.to_timedelta("15min")
df["Window"] = (df["Timestamp"] - window_start).dt.floor("1h") window_start
您可以通過首先將時間移動 15 分鐘來做到這一點,只需要幾個小時,然后再加回 15 分鐘。如果您不想將日期保留在可能的視窗中。
最后一步是對時間戳進行排序,每個視窗和每個人只保留一個
# Keep only one row per window and person
df = df.sort_values("Timestamp", ascending=False).groupby(["Name", "Window"]).head(1)
df = df.sort_index().reset_index(drop=True)
uj5u.com熱心網友回復:
將Timestamp列轉換為日期時間后,您可以使用 DataFrame .groupby方法結合.resample方法:
df["Timestamp"] = pd.to_datetime(df["Timestamp")
cols = ['Candy', 'Chocolate Bars', 'Cookies']
(df
.groupby("Name")
.resample("60T", offset="15T", on="Timestamp", label="right")
.last()
.loc[:, cols]
.reset_index()
.sort_values("Timestamp")
)
Name Timestamp Candy Chocolate Bars Cookies
0 Gaddy 2022-01-01 09:15:00 4 6.0 5
3 Harvey 2022-01-01 09:15:00 3 7.0 2
6 Khala 2022-01-01 09:15:00 5 8.0 4
1 Gaddy 2022-01-01 10:15:00 4 10.0 11
4 Harvey 2022-01-01 10:15:00 6 7.0 5
7 Khala 2022-01-01 10:15:00 6 13.0 8
2 Gaddy 2022-01-01 11:15:00 14 11.0 17
5 Harvey 2022-01-01 11:15:00 9 11.0 15
8 Khala 2022-01-01 11:15:00 10 19.0 8
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/473661.html
下一篇:我遇到了單熱編碼問題
