【问题标题】:Average every four rows but preserve timestamp values平均每四行,但保留时间戳值
【发布时间】:2017-04-05 00:18:39
【问题描述】:

在 pandas 中,对数据帧中每四行进行平均的最快方法是什么?

我的问题是我有一个程序每 15 秒记录一次数据,如下所示:

1477892758, 10
1477892773, 20
1477892788, 30
1477892803, 40
1477892818, 15
1477892833, 25
1477892848, 35
1477892863, 45

...等等,其中第一列是 Unix 时间戳,第二列是数据(我的真实数据集有更多列)。

我只想每分钟获取一次数据。如何平均每四行的数据,但仍保留有意义的时间戳?理想情况下,时间戳将是系列中的第一个,所以最后我会有这样的东西:

1477892758, 25
1477892818, 30

【问题讨论】:

    标签: python pandas group-by aggregate mean


    【解决方案1】:

    您可以使用groupby by index floor 除以4aggregate 第一列first 和第二列mean

    df = pd.DataFrame({'B': {0: 10, 1: 20, 2: 30, 3: 40, 4: 15, 5: 25, 6: 35, 7: 45}, 'A': {0: 1477892758, 1: 1477892773, 2: 1477892788, 3: 1477892803, 4: 1477892818, 5: 1477892833, 6: 1477892848, 7: 1477892863}})
    print (df)
                A   B
    0  1477892758  10
    1  1477892773  20
    2  1477892788  30
    3  1477892803  40
    4  1477892818  15
    5  1477892833  25
    6  1477892848  35
    7  1477892863  45
    
    print (df.index // 4)
    Int64Index([0, 0, 0, 0, 1, 1, 1, 1], dtype='int64')
    
    print (df.groupby(df.index // 4).agg({'A':'first', 'B':'mean'})[['A','B']])
                A   B
    0  1477892758  25
    1  1477892818  30
    

    如果第一列是index,首先使用reset_index

    df = pd.DataFrame({'A': [10, 20, 30, 40, 15, 25, 35, 45]}, index=[1477892758, 1477892773, 1477892788, 1477892803, 1477892818, 1477892833, 1477892848, 1477892863])
    print (df)
                 A
    1477892758  10
    1477892773  20
    1477892788  30
    1477892803  40
    1477892818  15
    1477892833  25
    1477892848  35
    1477892863  45
    
    df.reset_index(inplace=True)
    df.columns = list('AB')
    print (df)
                A   B
    0  1477892758  10
    1  1477892773  20
    2  1477892788  30
    3  1477892803  40
    4  1477892818  15
    5  1477892833  25
    6  1477892848  35
    7  1477892863  45
    
    
    print (df.groupby(df.index // 4).agg({'A':'first', 'B':'mean'})[['A','B']])
                A   B
    0  1477892758  25
    1  1477892818  30
    

    【讨论】:

    • 谢谢!有没有办法将其推广到具有任意列数的数据框?
    • 我认为你需要创建自定义dict,看看这个完美的answer
    猜你喜欢
    • 2020-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多