質問するログイン新規登録

回答編集履歴

1

手順が少ない方法を追記

2021/07/10 13:17

投稿

toshikawa
toshikawa

スコア388

answer CHANGED
@@ -24,4 +24,18 @@
24
24
 
25
25
  サンプルデータがないのでなんとも言えませんが、forが遅さの原因だと思いました。
26
26
 
27
- forを使用しなくても、`cv_date`との計算や最低値を`1(True)`その他を`0(False)`はこのように可能だと思います。
27
+ forを使用しなくても、`cv_date`との計算や最低値を`1(True)`その他を`0(False)`はこのように可能だと思います。
28
+
29
+ ```python
30
+ # 読み込み等は上記と一緒
31
+
32
+ df = df.loc[cv,:].apply(lambda x:pd.to_datetime(x, errors='coerce')).copy() # cv_dateが有効な行を抽出すると共に、datetime型にデータを変更したデータフレームを作成
33
+
34
+ cols=df.columns.drop('cv_date') # cv_date以外の列名
35
+
36
+ # cv_dateとの差が一番小さい = その日付が一番大きい ということで、
37
+ # 日付の最大値と比較した結果とcv_dateを結合してデータフレームを戻している
38
+ pd.concat([df.loc[:,cols].apply(lambda x: x == np.max(x) ,axis=1),df['cv_date']],axis=1)
39
+ ```
40
+
41
+ のほうが手順が少ないですね。