I have a column Date_Time
that I wish to groupby date time without creating a new column. Is this possible the current code I have does not work.
df = pd.groupby(df,by=[df['Date_Time'].date()])
groupby() function is used to split the data into groups based on some criteria. pandas objects can be split on any of their axes. The abstract definition of grouping is to provide a mapping of labels to group names.
One thing to notice here is our DataFrame gets sorted in ascending order of dates, to sort the DataFrame in descending order we can pass an additional parameter inside the sort_values() function that will set ascending value to False and will return the DataFrame in descending order.
You can use groupby
by dates of column Date_Time
by dt.date
:
df = df.groupby([df['Date_Time'].dt.date]).mean()
Sample:
df = pd.DataFrame({'Date_Time': pd.date_range('10/1/2001 10:00:00', periods=3, freq='10H'), 'B':[4,5,6]}) print (df) B Date_Time 0 4 2001-10-01 10:00:00 1 5 2001-10-01 20:00:00 2 6 2001-10-02 06:00:00 print (df['Date_Time'].dt.date) 0 2001-10-01 1 2001-10-01 2 2001-10-02 Name: Date_Time, dtype: object df = df.groupby([df['Date_Time'].dt.date])['B'].mean() print(df) Date_Time 2001-10-01 4.5 2001-10-02 6.0 Name: B, dtype: float64
Another solution with resample
:
df = df.set_index('Date_Time').resample('D')['B'].mean() print(df) Date_Time 2001-10-01 4.5 2001-10-02 6.0 Freq: D, Name: B, dtype: float64
resample
df.resample('D', on='Date_Time').mean() B Date_Time 2001-10-01 4.5 2001-10-02 6.0
Grouper
As suggested by @JosephCottam
df.set_index('Date_Time').groupby(pd.Grouper(freq='D')).mean() B Date_Time 2001-10-01 4.5 2001-10-02 6.0
TimeGrouper
You can set the index to be 'Date_Time'
and use pd.TimeGrouper
df.set_index('Date_Time').groupby(pd.TimeGrouper('D')).mean().dropna() B Date_Time 2001-10-01 4.5 2001-10-02 6.0
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With