Python 如何将熊猫数据帧重采样为每小时平均值,同时考虑时间和具有字符串值的列?

Python 如何将熊猫数据帧重采样为每小时平均值,同时考虑时间和具有字符串值的列?,python,string,pandas,dataframe,datetime,Python,String,Pandas,Dataframe,Datetime,我试图在python中对数据帧进行每小时平均值计算,方法是将日期信息和特定列中的字符串信息考虑在内。请参见下面的示例 station time temperature 0 EHAM 2020-01-01 13:30:00 2 1 EHAM 2020-01-01 13:50:00 5 2 EHAM 2020-01-02 13:30:00 7 3 EHAM 2020-01-02 13

我试图在python中对数据帧进行每小时平均值计算,方法是将日期信息和特定列中的字符串信息考虑在内。请参见下面的示例

  station                time temperature
0    EHAM 2020-01-01 13:30:00           2
1    EHAM 2020-01-01 13:50:00           5
2    EHAM 2020-01-02 13:30:00           7
3    EHAM 2020-01-02 13:50:00           1
4    EBBR 2020-01-01 13:30:00           6
5    EBBR 2020-01-01 13:55:00           1
6    EBBR 2020-01-02 14:30:00           2
7    EBBR 2020-01-02 14:40:00           3
从这个示例中,理想情况下,我希望获得以下新数据帧:

  station                time temperature
0    EHAM 2020-01-01 13:00:00         3.5
1    EHAM 2020-01-02 13:00:00           4
2    EBBR 2020-01-01 13:00:00         3.5
3    EBBR 2020-01-02 14:00:00         2.5
此数据帧的代码为:

import pandas as pd
from datetime import datetime

flights = {'station': ['EHAM','EHAM','EHAM','EHAM','EBBR','EBBR','EBBR','EBBR'],
        'time': [datetime.strptime('1/1/2020 1:30 PM', '%d/%m/%Y %I:%M %p'),datetime.strptime('1/1/2020 1:50 PM', '%d/%m/%Y %I:%M %p'),
                 datetime.strptime('2/1/2020 1:30 PM', '%d/%m/%Y %I:%M %p'),datetime.strptime('2/1/2020 1:50 PM', '%d/%m/%Y %I:%M %p'),
                 datetime.strptime('1/1/2020 1:30 PM', '%d/%m/%Y %I:%M %p'),datetime.strptime('1/1/2020 1:55 PM', '%d/%m/%Y %I:%M %p'),
                 datetime.strptime('2/1/2020 2:30 PM', '%d/%m/%Y %I:%M %p'),datetime.strptime('2/1/2020 2:40 PM', '%d/%m/%Y %I:%M %p')],
        'temperature': ['2', '5','7','1','6','1','2','3']}

df = pd.DataFrame(flights, columns = ['station', 'time','temperature'])

任何帮助都将不胜感激

聚合
平均值
,通过以下方式将
日期时间
转换为日期:

使用
石斑鱼的解决方案

df1 = (df.groupby(['station', pd.Grouper(key='time', freq='D')], sort=False)['temperature']
         .mean()
         .reset_index())

print (df1)
  station       time  temperature
0    EHAM 2020-01-01          3.5
1    EHAM 2020-01-02          4.0
2    EBBR 2020-01-01          3.5
3    EBBR 2020-01-02          2.5

非常感谢你!!后续-如果我有多个我想要平均值的列呢?比如说,温度和风速?我喜欢
Series.dt.date
方法,所以也许您可以向我展示在该解决方案中是如何做到的?@RikHendrickx-仅将
['temperature']
更改为
['temperature','col1','col2']
-所有列都代表meanHi!我还有一个后续问题,我修改了原来的问题,使之更清楚。我在寻找这一次的每小时平均值。我尝试将您的第一个解决方案中的
dt.date
更改为
dt.hour
,但是这只给了我新数据帧中的小时,没有日期信息。@RikHendrickx-然后可以使用
['station',df['time'].dt.date,df['time'].dt.hour]
['station',df['time'].dt floor('H')]
df1 = (df.groupby(['station', pd.Grouper(key='time', freq='D')], sort=False)['temperature']
         .mean()
         .reset_index())

print (df1)
  station       time  temperature
0    EHAM 2020-01-01          3.5
1    EHAM 2020-01-02          4.0
2    EBBR 2020-01-01          3.5
3    EBBR 2020-01-02          2.5