日付でgroupbyを実行するとき(object
)、それはint
よりも効率が悪いことに気付きました。次に例を示します。ここではpandas groupbyの日付を集約する効率的な方法
df = pd.DataFrame({'id1':[1,1,1,1,2,2,2,3,3,3],'id2':[10,20,30,10,20,30,10,20,30,10],'value':[123,156,178,19,354,26,84,56,984,12],
'date':['2015-01-12','2014-09-27','2014-10-14','2010-11-26','2010-04-09','2012-12-21','2009-08-16',
'2013-07-09','2014-02-14','2012-12-04']})
df
Out[1]:
date id1 id2 value
0 2015-01-12 1 10 123
1 2014-15-27 1 20 156
2 2014-10-14 1 30 178
3 2010-11-26 1 10 19
4 2010-04-09 2 20 354
5 2012-12-21 2 30 26
6 2009-08-16 2 10 84
7 2013-07-09 3 20 56
8 2014-02-14 3 30 984
9 2012-12-04 3 10 12
は、列の種類があります:
df.dtypes
Out[2]:
date object
id1 int64
id2 int64
value int64
dtype: object
そして今のは、集計の効率を見てみましょう::
%timeit df.groupby(['id1','id2']).agg({'value':np.sum})
1000 loops, best of 3: 1.35 ms per loop
%timeit df.groupby(['id1','id2']).agg({'date':np.max})
100 loops, best of 3: 2.75 ms per loop
することができますようにそれはvalue
の場合と同じようにdate
の2倍であり、大きなデータフレームには不都合です。
agg
をより効率的に実行する方法はありますか?多分date
列のタイプを変更するか、別の関数を使ってmax? datetime
にDTYPEを変更
通常、日付は 'datetime'でなければなりませんが、あなたがファンキーなカレンダーを使用していない限り、' 2014-15-27'は有効な日付ではないことに注意してください。 – EdChum
実際に、私は13、14、明らかに!それを変更しました。 ( 'date'カラムの型はまだ' object'ですが、 'python'は' objects'に専用の関数を使うことができないので、これが問題であると思われます) – ysearka