我現在有日期和時間資料我想將此資料框減少到兩列,其中時間戳(日期 時間)在一列中,值在另一列中
當前 df -
Date 8 am 10 am 1 pm
-----------------------------------------------
23/02/2022 5 10 11
24/02/2022 2 17 15
25/02/2022 7 90 175
所需的df -
Timestamp value
----------------------------------------------
2022-02-23 00:08:00 5
2022-02-23 00:10:00 10
2022-02-23 00:13:00 11
2022-02-24 00:08:00 2
2022-02-24 00:10:00 17
2022-02-24 00:13:00 15
2022-02-25 00:08:00 7
2022-02-25 00:10:00 90
2022-02-25 00:13:00 175
uj5u.com熱心網友回復:
IIUC, 使用melt和to_datetime:
(df
.reset_index() # only if not already index
.melt(id_vars='Date', var_name='time')
.assign(Timestamp=lambda d: pd.to_datetime(d['Date'] ' ' d['time']))
[['Timestamp', 'value']]
# below optional
.sort_values(by='Timestamp').reset_index(drop=True)
)
輸出:
Timestamp value
0 2022-02-23 08:00:00 5
1 2022-02-23 10:00:00 10
2 2022-02-23 13:00:00 11
3 2022-02-24 08:00:00 2
4 2022-02-24 10:00:00 17
5 2022-02-24 13:00:00 15
6 2022-02-25 08:00:00 7
7 2022-02-25 10:00:00 90
8 2022-02-25 13:00:00 175
uj5u.com熱心網友回復:
使用melt:
combine_datetime = lambda x: pd.to_datetime(x['Date'] ' ' x['Time'],
format='%d/%m/%Y %I %p')
out = (
df.reset_index().melt('Date', var_name='Time').assign(Timestamp=combine_datetime) \
.sort_values('Timestamp', ignore_index=True)[['Timestamp', 'value']]
)
print(out)
# Output
Timestamp value
0 2022-02-23 08:00:00 5
1 2022-02-23 10:00:00 10
2 2022-02-23 13:00:00 11
3 2022-02-24 08:00:00 2
4 2022-02-24 10:00:00 17
5 2022-02-24 13:00:00 15
6 2022-02-25 08:00:00 7
7 2022-02-25 10:00:00 90
8 2022-02-25 13:00:00 175
筆記
我使用
reset_index是因為我們不知道Date是列還是索引。如果是列,則可以洗掉reset_index. 在所有情況下,將其與melt.對于
pd.to_datetime,我使用了明確的格式來避免 Pandas 推斷日期時間,如果第一天有任何歧義。
uj5u.com熱心網友回復:
將日期設定為索引,堆疊并將連接的時間組件強制轉換為日期時間;
s =df.set_index('Date').stack().to_frame('value').reset_index()
s=s.assign(Timestamp=pd.to_datetime(s['Date'].str.cat(s['level_1'], sep =' ')))[['Timestamp', 'value']]
Timestamp value
0 2022-02-23 08:00:00 5
1 2022-02-23 10:00:00 10
2 2022-02-23 13:00:00 11
3 2022-02-24 08:00:00 2
4 2022-02-24 10:00:00 17
5 2022-02-24 13:00:00 15
6 2022-02-25 08:00:00 7
7 2022-02-25 10:00:00 90
8 2022-02-25 13:00:00 175
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/438538.html
上一篇:如何在PHP中排列陣列
