2016-08-24 5 views
3

私は列の時間を持つpythonデータフレーム(df1)を持っています。私はpd.to_datetime(df1['time'])を使ってカラムをdatetimeシリーズに変換しました。今、私はこのような列を取得する:Pythonを使用して、時間単位でDataframeで列をグループ化する方法は?

2016-08-24 00:00:00 2016-08-13 00:00:00 
2016-08-24 00:00:00 2016-08-13 00:00:00  
2016-08-24 00:00:00 2016-08-13 00:00:00 
2016-08-24 00:00:00 2016-08-13 00:00:00 
2016-08-24 00:00:01 2016-08-13 00:00:01 
2016-08-24 00:00:01 2016-08-13 00:00:01 
2016-08-24 00:00:02 2016-08-13 00:00:02 
2016-08-24 00:00:02 2016-08-13 00:00:02  
2016-08-24 00:00:02 2016-08-13 00:00:02  
2016-08-24 00:00:02 2016-08-13 00:00:02  
2016-08-24 00:00:02 2016-08-13 00:00:02  
2016-08-24 00:00:02 2016-08-13 00:00:02  
2016-08-24 00:00:02 2016-08-13 00:00:02  
2016-08-24 00:00:02 2016-08-13 00:00:02  
2016-08-24 00:00:02 2016-08-13 00:00:02  
.... 

2016-08-24 23:59:59 2016-08-13 00:00:02 

は基本的に、私は1時間でありますどのように多くのエントリが見ることができるように、最初の列は、時間によってグループ化することにしたいです。どんな助けも素晴らしいでしょう。

答えて

3

@jezraelセットアップを使用して:それとも、<M8[h]に変換してsizeを集約することでDatetimeIndexminutessecondsから削除することができます。

df.resample(rule='H', how='count').rename(columns = {'time':'count'}) 

         count 
2016-08-24 00:00:00  1 
2016-08-24 01:00:00  3 
2016-08-24 02:00:00  1 
+0

はいこれは、groupbyを単一の列に使用する場合に機能します。複数の列グループを使用すると何が起こるか知っていますか? – Vijay

+0

@Vijay ..ありがとう、別の質問をする...幸運 – Merlin

1

pandas.DatetimeIndexは次のように使用できます。

import numpy as np 
import pandas as pd 

# An example of time period 
drange = pd.date_range('2016-08-01 00:00:00', '2016-09-01 00:00:00', 
         freq='10min') 

N = len(drange) 

# The number of columns without 'time' is three. 
df = pd.DataFrame(np.random.rand(N, 3)) 
df['time'] = drange 

time_col = pd.DatetimeIndex(df['time']) 

gb = df.groupby([time_col.year, 
       time_col.month, 
       time_col.day, 
       time_col.hour]) 

for col_name, gr in gb: 
    print(gr) # If you want to see only the length, use print(len(gr)) 

[参考] Python Pandas: Group datetime column into hour and minute aggregations

+0

こんにちは@ダイアンリー。答えをありがとう。このコードを使用すると、Seriesオブジェクトに値のない時間があるというエラーがスローされます。何かご意見は? – Vijay

+0

@VijayどのバージョンのPythonを使用していますか?上記のコードは、Windows 10 64bit版のAnaconda Python 3.5(64bit)でテストされています。 (そしてどのバージョンのPandasを使用していますか?Mineは0.18.1です) –

2

使用resample

#pandas version 0.18.0 and higher 
df = df.resample('H').size() 

#pandas version below 0.18.0 
#df = df.resample('H', 'size') 

print (df) 
2016-08-24 00:00:00 1 
2016-08-24 01:00:00 3 
2016-08-24 02:00:00 1 
Freq: H, dtype: int64 

もし必要出力DataFrameとして:

df = df.resample('H').size().rename('count').to_frame() 
print (df) 
        count 
2016-08-24 00:00:00  1 
2016-08-24 01:00:00  3 
2016-08-24 02:00:00  1 

import pandas as pd 

df = pd.DataFrame({'time': {pd.Timestamp('2016-08-24 01:00:00'): pd.Timestamp('2016-08-13 00:00:00'), pd.Timestamp('2016-08-24 01:00:01'): pd.Timestamp('2016-08-13 00:00:01'), pd.Timestamp('2016-08-24 01:00:02'): pd.Timestamp('2016-08-13 00:00:02'), pd.Timestamp('2016-08-24 02:00:02'): pd.Timestamp('2016-08-13 00:00:02'), pd.Timestamp('2016-08-24 00:00:00'): pd.Timestamp('2016-08-13 00:00:00')}}) 
print (df) 
            time 
2016-08-24 00:00:00 2016-08-13 00:00:00 
2016-08-24 01:00:00 2016-08-13 00:00:00 
2016-08-24 01:00:01 2016-08-13 00:00:01 
2016-08-24 01:00:02 2016-08-13 00:00:02 
2016-08-24 02:00:02 2016-08-13 00:00:02 

df= df.groupby([df.index.values.astype('<M8[h]')]).size() 
print (df) 
2016-08-24 00:00:00 1 
2016-08-24 01:00:00 3 
2016-08-24 02:00:00 1 
dtype: int64 
+0

私の問題は、私がグループ化している複数の列があることです。私のコードは現在 です。 df2 = df1 ['count'] groupby([df1 [sc-status]、df1 [cs-method]、df1 [時間])count() 上記のコードを使用して、私の現在のデータを使用して、私はそれが私の入力ファイル(時間を介してランダムな要求)にあるように時間を取得します。私はこのグループ化されたオブジェクト(df2)を1時間ごとにグループ化する次のステップに進むのに苦労しています。 – Vijay

関連する問題