Python Pandas 使用日期时间数据按日期分组
Python Pandas Group by date using datetime data
我有一个列 Date_Time
,我希望在不创建新列的情况下按日期时间分组。这可能是我当前的代码不起作用吗?
df = pd.groupby(df,by=[df['Date_Time'].date()])
您可以使用 groupby
按 Date_Time
列的日期 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
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
df.groupby(pd.Grouper(key='Date_Time', axis=0, freq='M')).sum()
一个月
Y 代表年份
D代表一天
我有一个列 Date_Time
,我希望在不创建新列的情况下按日期时间分组。这可能是我当前的代码不起作用吗?
df = pd.groupby(df,by=[df['Date_Time'].date()])
您可以使用 groupby
按 Date_Time
列的日期 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
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
df.groupby(pd.Grouper(key='Date_Time', axis=0, freq='M')).sum()
一个月 Y 代表年份 D代表一天