我有兩個數據框,每個數據框都有關於開始和結束時間事件的信息。問題是這兩個數據幀有不同的開始和結束時間,因爲它們測量的是不同的東西。小麥我想要做的是創造新的事件,其中包含兩個信息。這些必須基於兩個數據幀之間的任何分割進行分割。例如:熊貓在開始和結束時間加入兩個數據幀不等於
數據框答:
Start End
2016-12-30 18:51:00 2016-12-30 19:37:00
2016-12-30 20:03:00 2016-12-30 20:11:00
2016-12-30 20:12:00 2016-12-30 21:02:00
2016-12-30 21:02:00 2016-12-30 21:04:00
2016-12-30 21:10:00 2016-12-30 21:12:00
2016-12-30 21:12:00 2016-12-30 21:32:00
數據幀B:
Start End
2016-12-30 18:33:45 2016-12-30 19:18:00
2016-12-30 19:18:00 2016-12-30 19:38:00
2016-12-30 19:38:00 2016-12-30 19:48:00
2016-12-30 19:48:00 2016-12-30 20:15:45
2016-12-30 20:15:45 2016-12-30 20:35:45
2016-12-30 20:35:45 2016-12-30 20:45:45
2016-12-30 20:45:45 2016-12-30 21:14:30
2016-12-30 21:14:30 2016-12-30 21:35:00
對於這些理想的輸出將是:
Start End
2016-12-30 18:51:00 2016-12-30 19:18:00
2016-12-30 19:18:00 2016-12-30 19:37:00
2016-12-30 20:03:00 2016-12-30 20:11:00
2016-12-30 20:12:00 2016-12-30 20:15:45
2016-12-30 20:15:45 2016-12-30 20:35:45
2016-12-30 20:35:45 2016-12-30 20:45:45
2016-12-30 20:45:45 2016-12-30 21:12:00
2016-12-30 21:12:00 2016-12-30 21:14:30
2016-12-30 21:14:30 2016-12-30 21:32:00
有一對夫婦的方法,我知道這個怎麼做。我可以將數據框分解爲分鐘級別並在幾分鐘內合併,但問題在於每個數據框都是200萬行,這將是一個非常漫長的過程。
我也有SQL可以做到這一點,但是當我試圖運行它時,它花了太長時間,DBA殺死了這個進程。
SQL的功能是:
select
a.UNIQUE_ID,
a,
b,
c,
d,
CASE WHEN B.START < A.START THEN A.START
ELSE B.START END START,
CASE WHEN B.END > A.END THEN A.END
ELSE B.END END END
from
(Select
UNIQUE_ID,
START,
END,
a,
b,
from table_1
)a
join
(
UNIQUE_ID,
Select
START,
END,
c,
d
from table_2) b
on 1=1
AND A.UNIQUE_ID = B.UNIQUE_ID
AND ((b.START between a.START and a.END)
or (b.end between a.START and a.END)
or (b.START < a.START and b.end > a.end)
or (a.START < b.START and a.end > b.end)
)
) a
這使得一排開始的每對組合,包含對於UNIQUE_ID至少一個相同分鐘結束時間。然後它使用case語句將每行縮減爲共享分鐘。
我想不出一種有效的方式來使用Pandas在python中複製這個SQL。我在熊貓中唯一知道的合併函數必須具有相同的列進行合併,它們不能是像我使用的連接那樣的範圍。
是否有大熊貓一類合併的,我可以用做類似的東西:
AND ((b.START between a.START and a.END)
or (b.end between a.START and a.END)
or (b.START < a.START and b.end > a.end)
or (a.START < b.START and a.end > b.end)
)
我能想到的唯一的辦法是遍歷每行中的DF切片回另一個數據幀到只有在該行的DF b中具有分鐘的行,然後在這兩個片上合併,並將所有這些合併連接成一個新的DF,但這將花費很長時間。
任何幫助表示讚賞。
於是我找到了工作但是,這似乎還在起作用,但我仍然會聽到任何人在大熊貓身上做出這樣的回答。 我在做什麼是使用軟件包pandasql創建一個sqlite數據庫的DF和執行SQL我知道的作品。這是一個非常漂亮的軟件包。 – user6745154