我有一個日期幀(df),我想構建一個回傳另一個資料幀(df_target)的函式。
我想看看 df 中 start 和 stop 之間的區別,如果它不到一秒鐘,我想折疊行。例如,第一行在 3.1 處停止,第二行在 3.2 處開始。所以這兩個我想折疊成一行,開始應該是 1.2,停止 4.4。
之后的行從 5.8 開始,所以我想保留這個。但是該行的新停靠點應該是 14.1,我希望星號為 5.8,停靠點將落在 14.1
在一般功能中實作這一目標的好方法是什么?
df=pd.DataFrame({'start':[1.2, 3.2, 5.8, 6.4, 11.8, 16.9],
'stop':[3.1, 4.4, 6.2, 11.7, 14.1, 19]})
df_target= pd.DataFrame({'start':[1.2, 5.8, 16.9],
'stop':[4.4, 14.1, 19]})
我已經嘗試了一些實驗,但并沒有真正做到這一點。此函式獲取第一行..
d=len(log)
for i in range(d-1):
if log.stop[i] - log.start[i 1] < -1:
print(pd.DataFrame({'start':[log.start[0]],
'stop':[log.stop[i]]}))
break
uj5u.com熱心網友回復:
您可以groupby.agg與自定義組一起使用。這假設這些值最初是排序的。
group = df['start'].sub(df['stop'].shift()).gt(1).cumsum()
df.groupby(group).agg({'start': 'first', 'stop': 'last'})
輸出:
start stop
0 1.2 4.4
1 5.8 14.1
2 16.9 19.0
中間步驟:
df['diff'] = df['start'].sub(df['stop'].shift())
df['>1'] = df['diff'].gt(1)
df['group'] = df['>1'].cumsum()
start stop diff >1 group
0 1.2 3.1 NaN False 0
1 3.2 4.4 0.1 False 0
2 5.8 6.2 1.4 True 1
3 6.4 11.7 0.2 False 1
4 11.8 14.1 0.1 False 1
5 16.9 19.0 2.8 True 2
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/456654.html
