2つのDataframeにおいて同じIDの日付を比較し取り出したい
python3とpandasを使っています。
df1,df2の2つのDataframeのうち同じIDの人物の日付を比較し、期間重複がある行のIDを取り出したいです。
実際には1万行ほどあります。
df1
ID | start_date | end_date |
---|---|---|
1 | 2010-01-01 | 2010-01-20 |
1 | 2010-03-20 | 2010-03-30 |
2 | 2010-02-01 | 2010-04-20 |
3 | 2010-06-10 | 2010-06-15 |
3 | 2010-06-20 | 2010-06-30 |
3 | 2010-07-10 | 2010-06-20 |
df2
ID | start_date | end_date |
---|---|---|
1 | 2010-01-15 | 2010-01-30 |
1 | 2010-04-20 | 2010-04-30 |
2 | 2010-05-01 | 2010-05-10 |
2 | 2010-05-20 | 2010-05-25 |
3 | 2010-02-01 | 2010-02-15 |
3 | 2010-06-15 | 2010-06-25 |
これをIDで比較して、下記のようなリストがほしいです。
result_list = [1,3]
追記
python
1result_list = [] 2for index,row1 in df1.iterrows(): 3 for index,row2 in df2.iterrows(): 4 if row1["id"] == row2["id"] and row2["start_date"] <= row1["end_date"] and row2["end_date"] >= row1["start_date"]: 5 result_list.append(row1["id"]) 6result_list = list(set(result_list)) 7result_list
なんとか試行錯誤して、求める結果を得ることができました!!
しかし、効率が悪いような気がしてなりません…
アドバイス宜しくお願い致します!
「解決できませんでした」とだけ書くのではなく、「こんな考え方でこんなコードを書いたけど、どの部分が解決できない」と具体的に試行した部分を書きましょう。
df1、df2の各データの中での期間重複はないという前提で良いですか?
matherさん
そうですね。失礼いたしました。また考え直してみます。アドバイスありがとうございます
meg_さん
そうですね。それぞれのDataframe内に期間重複はありません。
質問は再編集できますので追記してください。
追記いたしました!
IDのみ分かれば良いのであれば、重複が見つかったIDについてはそれ以後期間の条件判定しなくて良いと思います。少しでも速くなるかと思います。
ちなみに今1万行でで何分かかっていますか?
df1=5000行,df2=10000行で18分ほどです!
たしかにそうですね。。。
ということは
for index,row1 in df1.iterrows():
for index,row2 in df2.iterrows():
if row1["id"] == row2["id"] and row2["start_date"] <= row1["end_date"] and row2["end_date"] >= row1["start_date"]:
result_list.append(row1["id"])
break
こうでしょうか?
```python
result_list = []
for index,row1 in df1.iterrows():
for index,row2 in df2.iterrows():
if row1["id"] == row2["id"] and row2["start_date"] <= row1["end_date"] and row2["end_date"] >= row1["start_date"]:
result_list.append(row1["id"])
break
```
すみません…コード入力になりませんでした…
さらに、「for index,row1 in df1.iterrows():」の後に下記コードを追記するのはどうでしょう?
if not row1["id"] in result_list:
無駄なループ処理が減るかと思います。(コードに問題ないかテストお願いします)
三分の一に減りました!ありがとうございますー
回答1件
あなたの回答
tips
プレビュー