web-dev-qa-db-ja.com

Python Pandas日時データを使用して日付ごとにグループ化

列がありますDate_Time新しい列を作成せずに日付時刻をグループ化したい。これは私の現在のコードが機能しない可能性があります。

df = pd.groupby(df,by=[df['Date_Time'].date()])
21
GoBlue_MathMan

resample

df.resample('D', on='Date_Time').mean()

              B
Date_Time      
2001-10-01  4.5
2001-10-02  6.0

Grouper

@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の非推奨の使用

インデックスを'Date_Time'に設定し、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
20
piRSquared

groupbyを列の日付ごとに使用できますDate_Time by dt.date

df = df.groupby([df['Date_Time'].dt.date]).mean()

サンプル:

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

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
28
jezrael