Python 如何将pandas.DataFrame(一周)重采样为平均日
我有每天以完全相同的时间间隔采集的几天(甚至几周)的数据,并希望计算平均日-时间曲线。 到目前为止,我尝试了每日平均值,但我每天都有一个平均值。。。我需要的是在每个可用时间的所有可用天数的平均值。知道正确的命令很容易。不幸的是,我对熊猫很陌生。 哪怕只是一个提示,在文档中查找到哪里都会很好Python 如何将pandas.DataFrame(一周)重采样为平均日,python,pandas,average,resampling,Python,Pandas,Average,Resampling,我有每天以完全相同的时间间隔采集的几天(甚至几周)的数据,并希望计算平均日-时间曲线。 到目前为止,我尝试了每日平均值,但我每天都有一个平均值。。。我需要的是在每个可用时间的所有可用天数的平均值。知道正确的命令很容易。不幸的是,我对熊猫很陌生。 哪怕只是一个提示,在文档中查找到哪里都会很好 Time some value 2010-08-31 12:30:00 33.910 2010-08-31 12:40:00 33.250 2010-08-3
Time some value
2010-08-31 12:30:00 33.910
2010-08-31 12:40:00 33.250
2010-08-31 12:50:00 30.500
2010-08-31 13:00:00 27.065
2010-08-31 13:10:00 25.610
...
2013-06-07 02:10:00 16.970
2013-06-07 02:20:00 16.955
2013-06-07 02:30:00 17.000
2013-06-07 02:40:00 17.015
2013-06-07 02:50:00 16.910
您可以按hours
和minutes
和mean
进行尝试:
print df
Time some value
0 2010-08-31 12:30:00 33.910
1 2010-08-31 12:40:00 33.250
2 2010-08-31 12:50:00 30.500
3 2010-08-31 13:00:00 27.065
4 2010-08-31 13:10:00 25.610
5 2013-06-07 02:10:00 16.970
6 2013-06-07 02:20:00 16.955
7 2013-06-07 02:30:00 17.000
8 2013-06-07 02:40:00 17.015
9 2013-06-07 02:50:00 16.910
#convert column time to datetime
df['Time'] = pd.to_datetime(df['Time'])
#set index from column Time
df = df.set_index('Time')
print df
some value
Time
2010-08-31 12:30:00 33.910
2010-08-31 12:40:00 33.250
2010-08-31 12:50:00 30.500
2010-08-31 13:00:00 27.065
2010-08-31 13:10:00 25.610
2013-06-07 02:10:00 16.970
2013-06-07 02:20:00 16.955
2013-06-07 02:30:00 17.000
2013-06-07 02:40:00 17.015
2013-06-07 02:50:00 16.910
下一个解决方案未将index
设置为Datetimeindex
,请使用并创建新列newCol
:
print df
Time some value
0 2010-08-31 12:30:00 33.910
1 2010-08-31 12:40:00 33.250
2 2010-08-31 12:50:00 30.500
3 2010-08-31 13:00:00 27.065
4 2010-08-31 13:10:00 25.610
5 2013-06-07 02:10:00 16.970
6 2013-06-07 02:20:00 16.955
7 2013-06-07 02:30:00 17.000
8 2013-06-07 02:40:00 17.015
9 2013-06-07 02:50:00 16.910
#convert column time to datetime
df['Time'] = pd.to_datetime(df['Time'])
print df
Time some value
0 2010-08-31 12:30:00 33.910
1 2010-08-31 12:40:00 33.250
2 2010-08-31 12:50:00 30.500
3 2010-08-31 13:00:00 27.065
4 2010-08-31 13:10:00 25.610
5 2013-06-07 02:10:00 16.970
6 2013-06-07 02:20:00 16.955
7 2013-06-07 02:30:00 17.000
8 2013-06-07 02:40:00 17.015
9 2013-06-07 02:50:00 16.910
在groupby中,可能应该是
[df.index.hour,df.index.minute]
。读取:在每个可用时间,所有可用天数的平均值time@jezrael您的建议似乎为一天中的所有数据点提供了一个单一的值,因此,它不是一条在每个时间步长上具有7天平均值的曲线,而是在该天的每个时间步长上具有每天的平均值。所以我会有一个7级的绘图:-)那么可以是[df.index.hour,df.index.minute]
?推荐的输出是什么?我正在写我的评论,而另一个来了,[df.index.hour,df.index.minute]似乎起了作用,thx@cattt84-是否需要用新值覆盖列某些值
?还是使用新值添加新列?
print df
Time some value
0 2010-08-31 12:30:00 33.910
1 2010-08-31 12:40:00 33.250
2 2010-08-31 12:50:00 30.500
3 2010-08-31 13:00:00 27.065
4 2010-08-31 13:10:00 25.610
5 2013-06-07 02:10:00 16.970
6 2013-06-07 02:20:00 16.955
7 2013-06-07 02:30:00 17.000
8 2013-06-07 02:40:00 17.015
9 2013-06-07 02:50:00 16.910
#convert column time to datetime
df['Time'] = pd.to_datetime(df['Time'])
print df
Time some value
0 2010-08-31 12:30:00 33.910
1 2010-08-31 12:40:00 33.250
2 2010-08-31 12:50:00 30.500
3 2010-08-31 13:00:00 27.065
4 2010-08-31 13:10:00 25.610
5 2013-06-07 02:10:00 16.970
6 2013-06-07 02:20:00 16.955
7 2013-06-07 02:30:00 17.000
8 2013-06-07 02:40:00 17.015
9 2013-06-07 02:50:00 16.910
df['newCol'] = df.groupby([df['Time'].dt.hour, df['Time'].dt.minute])['some value']
.transform('mean')
print df
Time some value newCol
0 2010-08-31 12:30:00 33.910 33.910
1 2010-08-31 12:40:00 33.250 33.250
2 2010-08-31 12:50:00 30.500 30.500
3 2010-08-31 13:00:00 27.065 27.065
4 2010-08-31 13:10:00 25.610 25.610
5 2013-06-07 02:10:00 16.970 16.970
6 2013-06-07 02:20:00 16.955 16.955
7 2013-06-07 02:30:00 17.000 17.000
8 2013-06-07 02:40:00 17.015 17.015
9 2013-06-07 02:50:00 16.910 16.910