2016-09-25 4 views
1

私は、データを構造化して処理するためにパンダを使用しています。これは私のDATAFRAMEです:タイムリーゼでリサイズする

enter image description here

私は、(ここでは「3」という名前の)すべてのIDのために、(beginning_timeを最初から最後まですべてのビットレートのスコアを、時系列データのリサンプリングを行うには、持っていると思います/ 終了時間)。たとえば、最初の行については、2016-07-08 02:17:42から2016-07-08 02:17:55まで、同じビットレートスコアで、同じIDを持つすべての秒が必要です。このような何か:たとえば

、与えられた:

df = pd.DataFrame(
{'Id' : ['CODI126640013.ts', 'CODI126622312.ts'], 
'beginning_time':['2016-07-08 02:17:42', '2016-07-08 02:05:35'], 
'end_time' :['2016-07-08 02:17:55', '2016-07-08 02:26:11'], 
'bitrate': ['3750000', '3750000']}) 

います:

enter image description here

enter image description here

は、私は最初の行のために持っていたいです

thの同じことe secend row .. objectは開始時刻と終了時刻の間のdeltaTimeを再サンプリングすることです。ビットレートスコアはもちろん同じでなければなりません。

私はこのコードをしようとしている:

df['new_beginning_time'] = pd.to_datetime(df['beginning_time']) 
df.set_index('new_beginning_time').groupby('Id', group_keys=False).apply(lambda df: df.resample('S').ffill()).reset_index() 

をしかし、この文脈では、それは動作しませんでした!何か案は ?どうもありがとうございました !

答えて

1

あなたが使用できるようのpython 2.7、のpython 3を使用していますmeltresample - 0.18.1 version of pandasと:

df.beginning_time = pd.to_datetime(df.beginning_time) 
df.end_time = pd.to_datetime(df.end_time) 
df = pd.melt(df, id_vars=['Id','bitrate'], value_name='dates').drop('variable', axis=1) 
df.set_index('dates', inplace=True) 
print(df) 
            Id bitrate 
dates           
2016-07-08 02:17:42 CODI126640013.ts 3750000 
2016-07-08 02:05:35 CODI126622312.ts 3750000 
2016-07-08 02:17:55 CODI126640013.ts 3750000 
2016-07-08 02:26:11 CODI126622312.ts 3750000 

print (df.groupby('Id').resample('1S').ffill()) 
                Id bitrate 
Id    dates           
CODI126622312.ts 2016-07-08 02:05:35 CODI126622312.ts 3750000 
       2016-07-08 02:05:36 CODI126622312.ts 3750000 
       2016-07-08 02:05:37 CODI126622312.ts 3750000 
       2016-07-08 02:05:38 CODI126622312.ts 3750000 
       2016-07-08 02:05:39 CODI126622312.ts 3750000 
       2016-07-08 02:05:40 CODI126622312.ts 3750000 
       2016-07-08 02:05:41 CODI126622312.ts 3750000 
       2016-07-08 02:05:42 CODI126622312.ts 3750000 
       2016-07-08 02:05:43 CODI126622312.ts 3750000 
       2016-07-08 02:05:44 CODI126622312.ts 3750000 
       2016-07-08 02:05:45 CODI126622312.ts 3750000 
       2016-07-08 02:05:46 CODI126622312.ts 3750000 
       2016-07-08 02:05:47 CODI126622312.ts 3750000 
       ... 
       ... 
1

これはトリックを行う必要があります

all = [] 
for row in df.itertuples(): 
    time_range = pd.date_range(row.beginning_time, row.end_time, freq='1S') 
    all += (zip(time_range, [row.Id]*len(time_range), [row.bitrate]*len(time_range))) 
pd.DataFrame(all) 

In[209]: pd.DataFrame(all) 
Out[209]: 
         0     1  2 
0 2016-07-08 02:17:42 CODI126640013.ts 3750000 
1 2016-07-08 02:17:43 CODI126640013.ts 3750000 
2 2016-07-08 02:17:44 CODI126640013.ts 3750000 
3 2016-07-08 02:17:45 CODI126640013.ts 3750000 
4 2016-07-08 02:17:46 CODI126640013.ts 3750000 
5 2016-07-08 02:17:47 CODI126640013.ts 3750000 
6 2016-07-08 02:17:48 CODI126640013.ts 3750000 
7 2016-07-08 02:17:49 CODI126640013.ts 3750000 

編集:私は別のzip()