【问题标题】:Pandas Dataframe, getting average value for each monday 1 AmPandas Dataframe,每个星期一凌晨 1 点获取平均值
【发布时间】:2018-11-21 04:50:54
【问题描述】:

我的 DataFrame 如下所示:

index                   value
2016-03-21 00:00:00     0.613014
2016-03-21 01:00:00     0.596383
2016-03-21 02:00:00     0.623570
2016-03-21 03:00:00     0.663350
2016-03-21 04:00:00     0.677817
2016-03-21 05:00:00     0.727116
2016-03-21 06:00:00     0.920279
2016-03-21 07:00:00     1.205863
2016-03-21 08:00:00     0.880946
2016-03-21 09:00:00     0.186947
2016-03-21 10:00:00     -0.563276
2016-03-21 11:00:00     -1.249595
2016-03-21 12:00:00     -1.596035
2016-03-21 13:00:00     -1.886954
2016-03-21 14:00:00     -1.912325
2016-03-21 15:00:00     -1.750623
...     
2016-06-20 23:00:00     2.125791

我试图在数据框中获取每个星期一凌晨 1 点的平均值。最后,我想要一个代表数据框“平均周”的输出,这样我就可以可视化一周的过程。

我希望我能清楚地表达自己。

感谢您的帮助!

【问题讨论】:

    标签: python pandas dataframe types average


    【解决方案1】:

    我不确定如何解释您的问题,所以这里有两个答案(针对不同的问题)

    获取星期一凌晨 1:00 出现的所有值的平均值(输出将是单个标量)

    # Make sure the index is a pd.datetime object
    df.index = pd.to_datetime(df.index)
    
    # find all rows which occur on a monday and at 01:00:00, and take the mean
    monday_means = (df.loc[(df.index.weekday_name == 'Monday') &
                           (df.index.time == pd.to_datetime('01:00:00').time())]
                    .mean()
                    .to_frame('Monday 1 Am'))
    

    获取前一周的平均值,该周从星期一凌晨 1:00 开始(输出将是一个系列)

    # Make sure the index is a pd.datetime object
    df.index = pd.to_datetime(df.index)
    
    # Create a column for week number, which counts consecutively every monday at 1:00:00
    df['week_number'] = ((df.index.weekday_name == 'Monday') &
                         (df.index.time == pd.to_datetime('01:00:00').time())
                         .cumsum())
    
    
    # Groupby week number and get the mean
    df.groupby('week_number').mean()
    

    或者,更简单(但不太灵活,它将从星期一午夜开始一周,而不是凌晨 1 点):

    df.groupby(pd.Grouper(freq='W')).mean()
    

    【讨论】:

    • 感谢您的回答!是的,这就是我要找的东西,但是代码给了我一个错误'NameError:名称'datetime'未定义'。如果我使用 pd.dateime,它会抛出这个错误。 TypeError:描述符“时间”需要一个“datetime.datetime”对象但收到一个“int”
    • 是的,第一个答案非常有效,谢谢!!!有没有办法正确标记 x 轴?比如“星期一凌晨 1 点”或者我在途中丢失了这些信息
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-23
    • 2023-03-12
    • 1970-01-01
    • 2019-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多