2016-11-21 14 views
2

データフレーム内の4行ごとに平均するための最も速い方法は何ですか?4行ごとの平均はタイムスタンプの値を保持

私の問題は、このようになりますどの私は15秒ごとに番組の録画データを持っていることです。最初の列はUnixタイムスタンプと第二は、(私の実際のデータである場合等...

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

データセットにはさらに多くの列があります)。

私は1分に1回だけデータを持ちたいと思っています。どのようにして4行ごとにデータを平均化できますが、意味のあるタイムスタンプは保持しますか?理想的には、タイムスタンプは、シリーズの最初のだろうので、私は最終的にこのようなものを持っているでしょう:

1477892758, 25 
1477892818, 30 

答えて

2

あなたが最初の列firstのために第二meanため4aggregateで割っindex階でgroupbyを使用することができます。

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 
+0

ありがとう!これを任意の数の列を持つデータフレームに一般化する方法はありますか? –

+0

私はカスタム 'dict'を作成する必要があると思う、この完璧な[回答](http://stackoverflow.com/a/40697343/2901002)を参照してください。 – jezrael

関連する問題