Da der Index ein DatetimeIndex
ist, können Sie Strings verwenden, um es zu trennen.
Betrachten Sie die Datenrahmen 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
Not What You Want
Sie wollen nicht die Timestamp
df.loc[pd.to_datetime('2016-04-01')]
A 0
B 6
C 8
Name: 2016-04-01 00:00:00, dtype: int64
Statt
Sie diese Technik verwenden können, verwenden:
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
Ihre Funktion
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
Hier sind einige alternative
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')]
allererst nähert, vielen Dank für die Antwort. Ich bin von all der Unterstützung, die ich hier im Internet bekomme, sehr angetan. Ich wollte Sie nur aktualisieren, dass mein Code viel schneller lief (~ 2 Sekunden) als der Code, den Sie hier aktualisiert haben (~ 8 Sekunden) und um zu überprüfen, ob Sie einen weiteren Vorschlag zur Implementierung haben. – joaoavf
Ich habe meinen Beitrag mit einigen alternativen Ansätzen aktualisiert. Ich testete den Code jedoch mit einem 10.000 Zeilen langen Datenrahmen und mein Ansatz war eine Größenordnung schneller. Wenn Sie die Ergebnisse sehen, die Sie beanspruchen, muss es etwas Besonderes geben, was Sie so machen. – piRSquared