2017-11-09 6 views
1

datetime値が与えられた特定の日のレコードのみを含むデータフレームを返したいとします。スライスパンダ特定の日のすべてのレコードを表示するDataFrame

以下のコードは動作しています:

def dataframeByDay(datetimeValue): 
    cYear = datetimeValue.year 
    cMonth = datetimeValue.month 
    cDay = datetimeValue.day 
    crit = (df.index.year == cYear) & (df.index.month == cMonth) & (df.index.day == cDay) 
    return df.loc[crit] 

は、これを達成するためのより良い(速い)方法はありますか?

答えて

1

インデックスがDatetimeIndexであるため、文字列を使用してスライスすることができます。

は、データフレームdf

np.random.seed([3,1415]) 
df = pd.DataFrame(np.random.randint(10, size=(10, 3)), 
        pd.date_range('2016-03-31', periods=10, freq='12H'), 
        list('ABC')) 

df 

        A B C 
2016-03-31 00:00:00 0 2 7 
2016-03-31 12:00:00 3 8 7 
2016-04-01 00:00:00 0 6 8 
2016-04-01 12:00:00 6 0 2 
2016-04-02 00:00:00 0 4 9 
2016-04-02 12:00:00 7 3 2 
2016-04-03 00:00:00 4 3 3 
2016-04-03 12:00:00 6 7 7 
2016-04-04 00:00:00 4 5 3 
2016-04-04 12:00:00 7 5 9 

ないあなたは
欲しいもの、あなたがこのテクニックを使用することができますTimestamp

代わり
df.loc[pd.to_datetime('2016-04-01')] 

A 0 
B 6 
C 8 
Name: 2016-04-01 00:00:00, dtype: int64 


を使用したくない考えてみましょう。

ここ
df.loc['{:%Y-%m-%d}'.format(pd.to_datetime('2016-04-01'))] 

        A B C 
2016-04-01 00:00:00 7 3 1 
2016-04-01 12:00:00 0 6 6 

あなたの関数

def dataframeByDay(datetimeValue): 
    return df.loc['{:%Y-%m-%d}'.format(datetimeValue)] 

dataframeByDay(pd.to_datetime('2016-04-01')) 

        A B C 
2016-04-01 00:00:00 7 3 1 
2016-04-01 12:00:00 0 6 6 

いくつかの代替が

def dataframeByDay2(datetimeValue): 
    dtype = 'datetime64[D]' 
    d = np.array('{:%Y-%m-%d}'.format(datetimeValue), dtype) 
    return df[df.index.values.astype(dtype) == d] 

def dataframeByDay3(datetimeValue): 
    return df[df.index.floor('D') == datetimeValue.floor('D')] 
+0

すべての最初に近づいている、答えをどうもありがとうございました。私はインターネット上で私がここに持っているすべてのサポートによって幸せになる。 ここで更新したコード(〜8秒)よりもずっと速く(〜2秒)、実装方法について別の提案があるかどうかを確認するために、コードを更新したかっただけです。 – joaoavf

+1

私はポストをいくつかの代替アプローチで更新しました。しかし、私はデータフレーム10,000行のコードでこのコードをテストしましたが、私のアプローチは一桁高速でした。あなたが主張している結果を見ているなら、そのようにしていることについては何か別のものがなければなりません。 – piRSquared

関連する問題