平均每四行但保留时间戳值

时间:2016-11-21 14:50:45

标签: python pandas group-by aggregate mean

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

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

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

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

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

1477892758, 25
1477892818, 30

1 个答案:

答案 0 :(得分:2)

您可以使用groupby index楼层除以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