我在 python pandas 中有一個帶有日期和時間的資料框。我想根據預定義的間隔分配一個整數,例如:
Name Date Time
F 01/01/22 23:50:00
F1 01/01/22 22:00:00
F2 01/01/22 20:00:00
F3 01/01/22 19:00:00
F4 01/01/22 18:00:00
F5 01/01/22 17:00:00
F6 01/01/22 16:00:00
我想獲得:
Name Date Time Interval
F 01/01/22 23:50:00 1
F1 01/01/22 22:00:00 1
F2 01/01/22 20:00:00 2
F3 01/01/22 19:00:00 2
F4 01/01/22 18:00:00 3
F5 01/01/22 17:00:00 3
F6 01/01/22 16:00:00 4
間隔應該每兩個連續小時有一個整數。邏輯將是一個整數,其范圍為 [從 00:00:00 到 02:00:00]=1,[從 02:00:01 到 04:00:00]=2,[從 04 :00:01 到 06:00:00]=3,[從 06:00:01 到 08:00:00]=4,等等...
熊貓有可能嗎?
謝謝
uj5u.com熱心網友回復:
cut與將Time列轉換為小時一起使用:
h = pd.to_datetime(df['Time']).dt.hour
df['Interval'] = pd.cut(h, bins=range(0,24,2), include_lowest=True, labels=False) 1
print (df)
Name Date Time Interval
0 F 01/01/22 00:50:00 1
1 F1 01/01/22 01:00:00 1
2 F2 01/01/22 02:00:00 1
3 F3 01/01/22 03:00:00 2
4 F4 01/01/22 04:00:00 2
5 F5 01/01/22 05:00:00 3
6 F6 01/01/22 06:00:00 3
7 F3 01/01/22 07:00:00 4
8 F4 01/01/22 08:00:00 4
9 F5 01/01/22 09:00:00 5
10 F6 01/01/22 10:00:00 5
11 F3 01/01/22 11:00:00 6
12 F4 01/01/22 12:00:00 6
13 F5 01/01/22 17:00:00 9
14 F6 01/01/22 16:00:00 8
或者:
h = pd.to_datetime(df['Time']).dt.hour
df['Interval'] = h.sub(1).clip(lower=0) // 2 1
uj5u.com熱心網友回復:
IIUC,您可以使用雙重分組:
# group by consecutive hours
g1 = pd.to_datetime(df['Time']).dt.hour.diff().abs().ne(1).cumsum()
# split the consecutive in groups of 2
g2 = g1.groupby(g1).cumcount().floordiv(2)
df['Interval'] = df.groupby([g1, g2]).ngroup().add(1)
輸出:
Name Date Time Interval
0 F 01/01/22 23:50:00 1
1 F1 01/01/22 22:00:00 1
2 F2 01/01/22 20:00:00 2
3 F3 01/01/22 19:00:00 2
4 F4 01/01/22 18:00:00 3
5 F5 01/01/22 17:00:00 3
6 F6 01/01/22 16:00:00 4
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/518011.html
標籤:Python熊猫
