3 回答

TA貢獻(xiàn)1883條經(jīng)驗(yàn) 獲得超3個贊
這是一種無需 for 循環(huán)即可獲得結(jié)果的方法。我假設(shè)輸入數(shù)據(jù)被讀入一個名為 df 的數(shù)據(jù)幀:
# Initialize the output df
dfout = pd.DataFrame()
dfout['Event'] = df['Event']
dfout['EventStartTime'] = df['Time']
現(xiàn)在,我創(chuàng)建了一個名為“change”的變量,它告訴您事件是否發(fā)生了變化。
dfout['change'] = df['Event'].diff()
這就是 dfout 現(xiàn)在的樣子:
Event EventStartTime change
0 0 2020-02-12 11:00:00 NaN
1 0 2020-02-12 11:30:00 0.0
2 2 2020-02-12 12:00:00 2.0
3 1 2020-02-12 12:30:00 -1.0
4 0 2020-02-12 13:00:00 -1.0
5 0 2020-02-12 13:30:00 0.0
6 0 2020-02-12 14:00:00 0.0
7 1 2020-02-12 14:30:00 1.0
8 0 2020-02-12 15:00:00 -1.0
9 0 2020-02-12 15:30:00 0.0
現(xiàn)在,我繼續(xù)刪除事件未更改的行:
dfout = dfout.loc[dfout['change'] !=0 ,:]
現(xiàn)在,這將給我留下事件已更改的行。
接下來,當(dāng)前事件的事件結(jié)束時間就是下一個事件的開始時間。
dfout['EventEndTime'] = dfout['EventStartTime'].shift(-1)
數(shù)據(jù)框如下所示:
Event EventStartTime change EventEndTime
0 0 2020-02-12 11:00:00 NaN 2020-02-12 12:00:00
2 2 2020-02-12 12:00:00 2.0 2020-02-12 12:30:00
3 1 2020-02-12 12:30:00 -1.0 2020-02-12 13:00:00
4 0 2020-02-12 13:00:00 -1.0 2020-02-12 14:30:00
7 1 2020-02-12 14:30:00 1.0 2020-02-12 15:00:00
8 0 2020-02-12 15:00:00 -1.0 NaN
如果不需要,您可以選擇刪除“更改”列以及最后一行。

TA貢獻(xiàn)1719條經(jīng)驗(yàn) 獲得超6個贊
假設(shè)數(shù)據(jù)框是data:
current_event = None
result = []
for event, time in zip(data['Event'], data['Time']):
if event != current_event:
if current_event is not None:
result.append([current_event, start_time, time])
current_event, start_time = event, time
data = pandas.DataFrame(result, columns=['Event','EventStartTime','EventEndTime'])
訣竅是保存您的事件編號;如果下一個事件編號與保存的事件編號不同,則必須結(jié)束已保存的事件并開始新的事件。

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個贊
使用 group by 和 agg 以獲取所需格式的輸出。
df =pd.DataFrame([['0',11],['1',12],['1',13],['0',15],['1',16],['3',11]],columns=['Event','Time'] )
df.groupby(['Event']).agg(['first','last']).rename(columns={'first':'start-event','last':'end-event'})
輸出:
Event start-event end-event
0 11 15
1 12 16
3 11 11
添加回答
舉報(bào)