2017-01-12 6 views
0

パンダ初心者はここに。パンダ - 24時間データのための時間の最後の分からのデータを選択

私は列Aの累積値で、分単位で24時間の時系列を持っている:

Time    Energy 
11-01-2017 10:14 19.14634168 
11-01-2017 10:15 19.14702618 
11-01-2017 10:16 19.14719065 
11-01-2017 10:17 19.14719065 
… 
11-01-2017 23:56 19.47694149 
11-01-2017 23:57 19.4771605 
11-01-2017 23:58 19.47753776 
11-01-2017 23:59 19.47801377 

私は、列Aの値が毎時の終わり(DD-であるかを知りたいですmm-yyy hh:)、このデータをcsvファイルに保存します。追加の列は時間を表示するために追加されます。結果は次のようになります。

Time    Hour Energy 
    11-01-2017 00:59 1  02.0000000 
    11-01-2017 01:59 2  04.1234554 
    11-01-2017 02:59 3  06.1234554 
    ... 
    11-01-2017 23:59 24 19.4780137 

が、私は59の秒の値に基づいて時系列を繰り返すべきか、それだけで列Aのすべての60行を値を摘み取ることが容易である、与えられた常に1440行が存在します(1440分)?

答えて

2

あなたが使用することができます。

df.Time = pd.to_datetime(df.Time) 
df['hour'] = df.Time.dt.hour + 1 
df1 = df[df.Time.dt.minute == 59] 

print (df1) 
       Time  Energy hour 
7 2017-11-01 23:59:00 19.478014 24 
+0

おかげで...私は '時間' 列を追加する難しさを持ってきています。問題は、列の名前が実際に「時間」ではないことです。空白/インデックス列です。これはどのように参照するのですか? 「時間」ではなく「索引」を使用しますか? – wazzahenry

+0

正確に 'dt' - ' df ['hour'] = df.index.hour + 1'を削除してください – jezrael

1

をあなたがステップ引数でスライスセマンティクスを使用することができます言うように、あなたの時間値が隙間なく規則的である場合:

df.iloc[::60] 

最初のエントリがない場合にはあなたが最初の引数をオフセットしたような最初の1分間:

df.iloc[45::60] 

分14は45分分59

タイミング

In [176]: 
s = pd.date_range(dt.datetime(2016,1,1), freq='1min', periods=10000) 
s 

Out[176]: 
DatetimeIndex(['2016-01-01 00:00:00', '2016-01-01 00:01:00', 
       '2016-01-01 00:02:00', '2016-01-01 00:03:00', 
       '2016-01-01 00:04:00', '2016-01-01 00:05:00', 
       '2016-01-01 00:06:00', '2016-01-01 00:07:00', 
       '2016-01-01 00:08:00', '2016-01-01 00:09:00', 
       ... 
       '2016-01-07 22:30:00', '2016-01-07 22:31:00', 
       '2016-01-07 22:32:00', '2016-01-07 22:33:00', 
       '2016-01-07 22:34:00', '2016-01-07 22:35:00', 
       '2016-01-07 22:36:00', '2016-01-07 22:37:00', 
       '2016-01-07 22:38:00', '2016-01-07 22:39:00'], 
       dtype='datetime64[ns]', length=10000, freq='T') 

In [179]:  
%timeit s[s.minute == 59] 
%timeit s[::60] 

1000 loops, best of 3: 639 µs per loop 
10000 loops, best of 3: 27.5 µs per loop 

はそうここスライスは〜20倍速く

+0

面白い、ありがとう。私は、このスライスのコンボと上記の提案をjezraelがソリューションに使用しました。 – wazzahenry

+0

@wazzahenryこれは、ここではインデックスの形式に依存します。ここでは通常の値があり、スライシングは高速ですが、他のソリューションは同等かどうかは関係なく動作します – EdChum

関連する問題