2017-09-20 12 views
3

1分間隔のマーケティングデータがあります。 CSV-テーブルのサンプルとして、各行は毎分の最大値を表す :pd.DateFrameの各5行に最大値を見つける

time ch1  ch2 ch3 ch4  
20:03 1754 539 149 1337  
20:04 2073 576 160 1448  
20:05 2246 599 176 1515  
20:06 2246 637 176 1531  
20:07 2457 651 183 1549  
20:08 2564 677 184 1655  
20:09 2624 712 191 1699  
20:10 2742 717 194 1672  
20:11 2788 714 199 1675  
20:12 2792 693 186 1680  
20:13 2914 708 188 1672  
20:14 3067 715 194 1685  
20:15 3067 725 196 1682  

はさらに、Iは各5分の最大値を見つける必要があります。だから私は、各列の5行(またはそれ以下の行が残っていない場合)ごとに最大値を見つけて、新しい5分行に挿入する必要があります。

私は(一例として)受け取るために探して:

各新しい行が5

time ch1  ch2 ch3 ch4  
20:03 2564 677 184 1655  
20:08 2914 717 199 1699  
20:13 3067 725 196 1685  
私は正直で検索しましたが、

なし結果の最大値を表すために持っています。

Pythonには、私の仕事のための優雅な解決策がありますか? ありがとうございます!あなたの入力を使用することにより

答えて

3
g = df.groupby(np.arange(len(df)) // 5) 
g.max().assign(time=g.time.first()) 

    time ch1 ch2 ch3 ch4 ch5 
0 20:03 2457 651 183 1549 4840 
1 20:08 2792 717 199 1699 5376 
2 20:13 3067 725 196 1685 5670 
4

df['group']=df.index//5 
target=df.groupby('group').agg(max) 
target['time']=df.groupby('group').time.agg(min) 

Out[511]: 
     time ch1 ch2 ch3 ch4 ch5 
group         
0  20:03 2457 651 183 1549 4840 
1  20:08 2792 717 199 1699 5376 
2  20:13 3067 725 196 1685 5670 
3

イムあなたは、これはデータのCSV形式のテーブルで指定されたので、あなたがdatetimeに自分の価値観を変換しませんでしたので、私はにインデックスを変換すると仮定しようdatetime

df.index = pd.to_datetime(df.time,format='%H:%M') 

今指数はdatetimeフォーマットであることを、私たちは5分間隔でグループにresampleを使用することができます。注:それはあなたがそれをフォーマットしたかった方法ですので、私はここ3にベースを設定します、しかし、私は長期的にはあなたが0でそれを残して、より適しかもしれないと思うので、グループにデータがちょうど

df.resample('5T',base=3).max().drop('time',1) 

を実行します動的に最初の分の値を使用することにベースを設定するには

df.resample('5T',base=int(df.time.values[0][-1:])).max().drop('time',1) 

あなただけ

01を実行して、インデックスの日付をたくない場合は

     ch1 ch2 ch3 ch4 
time 
2017-09-20 20:03:00 2457 651 183 1549 
2017-09-20 20:08:00 2792 717 199 1699 
2017-09-20 20:13:00 3067 725 196 1685 

を生み出します

df.index = df.index.time 

はしかし、あなたは日付が

  ch1 ch2 ch3 ch4 
20:03:00 2457 651 183 1549 
20:08:00 2792 717 199 1699 
20:13:00 3067 725 196 1685 
+0

感謝をリサンプリングするために含ま必要があります!しかし、データセットには数日間(15.09,16.09,17.09)あります。あなたは今、日付の枠内で別の日を設定する方法はありますか? (それは.cslだけでなく、.xls形式になります)。 – Gregof

+0

日付を含むようにサンプルを更新できますか?それが単に日付の列であれば、その列を結合してdatetimeオブジェクトにすることができます – DJK

関連する問題