Python 如何将熊猫数据帧重采样为每小时平均值,同时考虑时间和具有字符串值的列?
我试图在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
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