鑒于此資料集包含事件的日期時間和票證掃描的日期時間
| 事件名稱 | 事件日期時間 | 掃描日期時間 |
|---|---|---|
| 第一局 | 2018-10-17 19:30:00 | 2018-10-17 20:01:20 2018-10-17 19:20:10 2018-10-17 21:44:43 2018-10-17 20:30:46 2018-10-17:59:51 |
| ... | ... | ... |
| 游戲二 | 2019-04-10 19:30:00 | 2019-04-10 19:39:35 2019-04-10 30:30:49 2019-04-10 20:41:10 2019-04-10 19:46:20 2019-04-10: 292:24 |
并且所需的輸出應該是在event_datetime之前和之后每 15 分鐘時間間隔的列,其值為scan_datetime
| 時間間隔 | 90-75 | 75-60 | 60-45 | 45-30 | 30-15 | 15-0 | 0-15 | 15-30 | 30-45 | 45-60 |
|---|---|---|---|---|---|---|---|---|---|---|
| 數數 | 2 | 1 | 5 | 6 | 4 | 3 | 25 | 7 | 4 | 1 |
uj5u.com熱心網友回復:
首先,您需要從scan_datetime列中提取日期時間,然后將其分解。接下來,計算event_datetime和scan_datetime列之間的時間增量。最后,bin 值和計數出現次數。
DT = r'\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}'
df['scan_datetime'] = df['scan_datetime'].str.findall(DT)
df = df.explode('scan_datetime').astype({'event_datetime': 'datetime64',
'scan_datetime': 'datetime64'})
df['diff'] = df['event_datetime'].sub(df['scan_datetime']).dt.total_seconds().div(60)
bins = np.arange(24*-15, 24*15 1, 15)
labels = [f'{abs(i)}-{abs(j)}' for i, j in zip(bins, bins[1:])]
out = pd.cut(df['diff'], bins=bins, labels=labels) \
.value_counts(sort=False).to_frame('count').T
輸出:
>>> out
180-165 165-150 150-135 135-120 120-105 105-90 90-75 75-60 60-45 45-30 ... 30-45 45-60 60-75 75-90 90-105 105-120 120-135 135-150 150-165 165-180
count 1 0 0 1 0 0 0 3 0 1 ... 0 0 0 0 0 0 0 0 0 0
[1 rows x 24 columns]
uj5u.com熱心網友回復:
首先在 scan_datetime 中分解串列。
df = df.explode("scan_datetime").reset_index(drop=True)
這將使每次掃描成為單獨的行。我假設串列中的值是字串,因此我們將它們轉換為日期時間:
df["scan_datetime"] = pd.to_datetime(df["scan_datetime"])
比你計算的差異:
df["diff"] = df["event_datetime"] - df["scan_datetime"]
df["diff"] = (df["diff"].dt.total_seconds()/60).astype(int)
現在您以分鐘為單位的差異(有符號整數)。比您以指定的間隔運行值計數。
df["diff"].value_counts(bins=[-90,-75,-60, -45, -30, -15, 0, 15, 30, 45, 60])
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/399212.html
上一篇:將時間戳轉換為特定時區的日期時間
