インデックスが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')]
すべての最初に近づいている、答えをどうもありがとうございました。私はインターネット上で私がここに持っているすべてのサポートによって幸せになる。 ここで更新したコード(〜8秒)よりもずっと速く(〜2秒)、実装方法について別の提案があるかどうかを確認するために、コードを更新したかっただけです。 – joaoavf
私はポストをいくつかの代替アプローチで更新しました。しかし、私はデータフレーム10,000行のコードでこのコードをテストしましたが、私のアプローチは一桁高速でした。あなたが主張している結果を見ているなら、そのようにしていることについては何か別のものがなければなりません。 – piRSquared