2017-04-27 26 views
1

はここに私のパンダのデータフレームを参照してくださいインデックスあいまいな時間:Pythonのパンダ

     press222 
datetime      
2017-03-31 14:02:04 110.854683 
2017-03-31 14:02:04 110.855759 
2017-03-31 14:02:04 110.855103 
2017-03-31 14:02:04 110.853790 
2017-03-31 14:02:05 110.854034 
2017-03-31 14:02:05 110.855103 
2017-03-31 14:02:05 110.854683 
2017-03-31 14:02:05 110.855698 
2017-03-31 14:02:05 110.853851 
2017-03-31 14:02:06 110.854385 
2017-03-31 14:02:06 110.853905 
2017-03-31 14:02:06 110.854988 
2017-03-31 14:02:06 110.854988 
2017-03-31 14:02:06 110.854988 

あなたは、私が毎秒複数の値を持っていることがわかりますが、残念ながらタイムスタンプが全体秒である(ロガーミリ秒を吐き出すませんでした)それは何とかあいまいになります。 "同じ秒"に属する値の平均を得る方法はありますか?この例では、14:02:04の平均値、05の平均値、そして06の平均値はどれですか?

(実際のデータフレームは、もちろん手動でそれを行うには長すぎる...)

私はローリングはこのような意味で試してみました:

df.rolling('S').mean() 

そして、私は別の値が、それでも同じ時間を取得列(=インデックス)。私は対応する平均値で1秒間に1つの行だけを保持したいと思います。 ご協力いただきありがとうございます - ありがとう!インデックスの

答えて

1

あなたは可能性がgroupbymeanを呼び出す:

In [285]: 
df.groupby(level=0).mean() 

Out[285]: 
        press222  
datetime       
2017-03-31 14:02:04  110.854834 
2017-03-31 14:02:05  110.854674 
2017-03-31 14:02:06  110.854651 

をだから、すべての重複した値の崩壊単一日時エントリに

を読書でこれを行うには、チャンクを読み込み、上記の操作を行うことができ重複したエントリがチャンクをまたぐ場合は、上記の処理を行う必要がありますが、最初の読み込みを圧縮します。

In [291]:  
import io 
import pandas as pd 
t="""datetime,press222  
2017-03-31 14:02:04,110.854683 
2017-03-31 14:02:04,110.855759 
2017-03-31 14:02:04,110.855103 
2017-03-31 14:02:04,110.853790 
2017-03-31 14:02:05,110.854034 
2017-03-31 14:02:05,110.855103 
2017-03-31 14:02:05,110.854683 
2017-03-31 14:02:05,110.855698 
2017-03-31 14:02:05,110.853851 
2017-03-31 14:02:06,110.854385 
2017-03-31 14:02:06,110.853905 
2017-03-31 14:02:06,110.854988 
2017-03-31 14:02:06,110.854988 
2017-03-31 14:02:06,110.854988""" 
chunks=[] 
for chunk in pd.read_csv(io.StringIO(t), parse_dates=[0], index_col=[0], chunksize=3): 
    chunks.append(chunk.groupby(level=0).mean()) 
final_df = pd.concat(chunks) 
final_df 

Out[291]: 
        press222  
datetime       
2017-03-31 14:02:04  110.855182 
2017-03-31 14:02:04  110.853790 
2017-03-31 14:02:05  110.854568 
2017-03-31 14:02:05  110.854744 
2017-03-31 14:02:06  110.854426 
2017-03-31 14:02:06  110.854988 

あなたは、我々はまだ重複したエントリを持っていますが、DFが、我々はまだgroupby再び実行する必要があるので、我々は、プロセスを事前なかった場合よりも小さくなっていることがわかります。

In [292]: 
final_df.groupby(level=0).mean() 

Out[292]: 
        press222  
datetime       
2017-03-31 14:02:04  110.854486 
2017-03-31 14:02:05  110.854656 
2017-03-31 14:02:06  110.854707 
+0

パーフェクト!ファイルから(read_csvを使って)データを読み込んでいる間にそれを行う方法はありますか?それは必須ではありませんが、知っておいて嬉しいです – Robert

+0

チャンクを読み込んで各チャンクを圧縮することができますが、複数のチャンクにまたがっている場合は、上記のやり方をとることになります。これは実際にファイルサイズに依存しますが、私はアップデートを投稿します – EdChum

+0

更新を見ると最初の読み込みを減らすのに役立ちますが、もう一度 'groupby'する必要があります – EdChum