2016-10-18 5 views
0

私は、Dateによってインデックス付けされたpandas Dataframeを持っています。私はすべての連続したギャップをピリオドでピリオドと連続するすべてのピリオドで選択したいと思います。これどうやってするの?パンダの時系列でギャップと連続期間を検出するには

ない列を含むデータフレームの例が、日ランキング:

In [29]: import pandas as pd 

In [30]: dates = pd.to_datetime(['2016-09-19 10:23:03', '2016-08-03 10:53:39','2016-09-05 11:11:30', '2016-09-05 11:10:46','2016-09-05 10:53:39']) 

In [31]: ts = pd.DataFrame(index=dates) 

あなたは2016年8月3日と2016年9月19日からギャップがある見ることができるように。これらを検出するにはどうすればよいのですか?つまり、ギャップの持続時間の中央値が「x」などの説明的な統計情報(40ギャップ)を作成できます。また、,2016-09-05と2016-09-06は2日間の範囲です。どのようにこれらを検出し、説明的な統計を印刷することができますか?

データフレーム内の他の列をgroupbyに使用したいので、理想的には結果は別のDataframeとして返されます。

+0

を、あなたは、データのいくつかのサンプルを追加することはできますか? [良い再現可能なパンダの例を作る方法](http://stackoverflow.com/questions/20109391/how-to-make-good-reproducible-pandas-examples)をチェックしてください。 – jezrael

+0

確かに、今追加されます。 –

答えて

0

は、ここに始めるために何か:

df = pd.DataFrame(np.ones(5),columns = ['ones']) 
df.index = pd.DatetimeIndex(['2016-09-19 10:23:03', '2016-08-03 10:53:39', '2016-09-05 11:11:30', '2016-09-05 11:10:46', '2016-09-06 10:53:39']) 
daily_rng = pd.date_range('2016-08-03 00:00:00', periods=48, freq='D') 
daily_rng = daily_rng.append(df.index) 
daily_rng = sorted(daily_rng) 
df = df.reindex(daily_rng).fillna(0) 
df = df.astype(int) 
df['ones'] = df.cumsum() 

CUMSUM()「のもの」があなたの提供の点であなたのデータを分割するには、グループ化変数を作成します。

print df.head() 

        ones 
2016-08-03 00:00:00  0 
2016-08-03 10:53:39  1 
2016-08-04 00:00:00  1 
2016-08-05 00:00:00  1 
2016-08-06 00:00:00  1 

print df.tail() 
        ones 
2016-09-16 00:00:00  4 
2016-09-17 00:00:00  4 
2016-09-18 00:00:00  4 
2016-09-19 00:00:00  4 
2016-09-19 10:23:03  5 

を完了するために:あなたはそれが意味をなすだろうスプレッドシートを言ってDFを印刷する場合

df = df.reset_index() 
df = df.groupby(['ones']).aggregate({'ones':{'gaps':'count'},'index':{'first_spotted':'min'}}) 
df.columns = df.columns.droplevel() 

与える:

   first_time gaps 
ones       
0 2016-08-03 00:00:00  1 
1 2016-08-03 10:53:39 34 
2 2016-09-05 11:10:46  1 
3 2016-09-05 11:11:30  2 
4 2016-09-06 10:53:39 14 
5 2016-09-19 10:23:03  1 
+0

これは良いスタートを切ったようです。私はcumsum後に失われた。この時点で:In [11]:df = df.astype(int)In [12]:df.head() Out [12]: ones 2016-08-03 00:00:00 0 2016 -08-03 10:53:39 1 2016-08-04 00:00:00 0 2016-08-05 00:00:00 0 2016-08-06 00:00:00 0' –

+0

キーグループ化変数を取得することです。つまり、クマサムのためのものです。 – Dickster

+0

どのように私はそのグループ変数を取って、最初のギャップと最初の連続したストリークを検出するのか説明できますか? –

関連する問題