私は、開始日と終了日を示す2つの列を持つPythonでpandas DataFrameを持っています。インターバルの間に任意の日付は、[開始した場合、エンド)、開始終了日の各ペアのために、 パンダを使用して週末を含む日付範囲を探す
- を考える: は私がしたいです(始点を含むが終点を除く)は、金曜日または土曜日のいずれかです。
- pandas Seriesをブール値として出力します。
- 解決策は、2M以上の行を処理しているので、比較的高速である必要があります。
データセットは以下のようになります。
start end
2013-08-02 2013-08-04
2014-11-24 2014-11-28
2013-10-29 2013-10-31
2013-12-06 2013-12-10
2014-08-15 2014-08-17
私のような何かを期待されるだろう:
has_weekend
TRUE
FALSE
FALSE
TRUE
TRUE
を私の現在のアプローチは、2M行の近くにありDATAFRAMEのために非常に遅いです。
df.apply(lambda x: np.any(np.in1d([d.weekday() for d in pd.date_range(x.start, x.end)],[4,5])), axis=1)
任意のアイデア: ここでは、コードですか?
SOLUTION 最速の解決策は、しかし、彼らは小さな上の任意の時間の改善はありませんが、私はいくつかの論理演算子について考え、これらが何をすべき@Anton VBRの
s = df.start.dt.dayofweek
e = df.end.dt.dayofweek
dt = (df.end- df.start).dt.days
has_weekend = (((s >= 4) & (s != 6)) | (e>=5) | ((e < s) & (s != 6)) | (dt >= 6))
あなたの質問にデータが不足していることは役に立ちません。 –
@cᴏʟᴅsmoreもっと分かりやすくするために、データのスニペットを追加しました。 – dandroid
この入力には、何が期待されていますか? '0,1,3,4 '? –