2つのデータフレームがあります。1つはユーザーが手動で作成したもので、もう1つはマシンからのエラーです。最初のデータフレーム(df_a)の時間間隔に基づいてそれらをマージしたい
これがデータフレームです。
d_a = {'Station' : ['A1','A2'],
'Reason_a' : ['Electronic','Feed'],
'StartTime_a' : ['2019-01-02 02:00:00','2019-01-02 04:22:00'],
'EndTime_a' : ['2019-01-02 02:20:00', '2019-01-02 04:45:00']}
d_b = {'Station' : ['A1','A1','A1','A2','A2','A2'],
'Reason_b' : ['a','n','c','d','e','n'],
'StartTime_b' : ['2019-01-02 00:00:00.000','2019-01-02 00:05:00.000','2019-01-01 23:55:00.000','2019-01-02 04:19:53.000','2019-01-02 04:19:37.000','2019-01-02 04:23:00.000'],
'EndTime_b' : ['2019-01-02 00:19:15.000','2019-01-02 00:29:45.000','2019-01-02 00:12:12.000','2019-01-02 04:27:12.000','2019-01-02 04:47:16.000','2019-01-02 04:52:45.000']}
df_a = pd.DataFrame(d_a)
df_b = pd.DataFrame(d_b)
有効なレコードと見なされる2つのデータフレームの時間間隔の交点。
condition1 = df_b start_time df_a開始時刻の後に開始し、df_a終了時刻の前に終了します
condition2 = df_b start_timeは、df_aの開始時刻より前に開始しますが、df_aの終了時刻より前に終了します。
condition3 = df_b start_timeは、df_aの開始時刻とdf_aの終了時刻の間に開始しますが、df_aの終了時刻の後に終了します。
最後に、条件に基づいてこれら2つのデータフレームをマージしたいと思います。私の理想的なテーブルは以下のようになります
Station Reason_a a n c d e
A1 Electronic 1 1 1 0 0
A2 Feed 0 1 0 1 0
この問題にどのように取り組むべきですか?コメントがあれば参考になります。
前もって感謝します。
テーブルをマージしstation
て交差点を計算することで解決します:D
import numpy as np
df = pd.merge(df_a, df_b, on="Station")
# Convert to date
for datevar in ["StartTime_a", "StartTime_b", "EndTime_a", "EndTime_b"]:
df[datevar] = pd.to_datetime(df[datevar])
# Intersections definition
df["intersection"] = (((df.StartTime_a > df.StartTime_b) & (df.StartTime_a < df.EndTime_b)) |
((df.StartTime_a < df.StartTime_b) & (df.EndTime_a > df.StartTime_b)))
# Filter only intersections
(df[["Station", "Reason_a", "Reason_b", "intersection"]]
.pivot_table(index=["Station", "Reason_a"], columns="Reason_b", aggfunc=np.sum)
.fillna(0).astype(int))
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加