pandas在数据帧中平均每四行的最快方法是什么?
我的问题是我有一个程序每15秒记录一次数据,如下所示:
1477892758, 10
1477892773, 20
1477892788, 30
1477892803, 40
1477892818, 15
1477892833, 25
1477892848, 35
1477892863, 45
...等,其中第一列是Unix时间戳,第二列是数据(我的真实数据集有更多列)。
我只希望每分钟获得一次数据。如何平均每四行的数据但仍保留有意义的时间戳?理想情况下,时间戳将是系列中的第一个,所以我最终会得到类似的东西:
1477892758, 25
1477892818, 30
答案 0 :(得分:2)
您可以使用groupby
index
楼层除以4
和aggregate
获取第一列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