2

時間で測定されるイベント データがいくつかあるので、データ形式は次のようになります。

Time(s)    Pressure    Humidity
0             10            5 
0             9.9           5.1
0             10.1          5
1             10            4.9
2             11            6

ここで、最初の列は実験開始からの経過時間 (秒単位) です。他の 2 つの列はいくつかの観察です。行は、特定の条件が真の場合に作成されます。これらの条件は、ここでの説明の範囲を超えています。セミコロンで区切られた 3 つの数値の各セットは、データの行です。ここでの時間の解決の最小粒度はわずか数秒であるため、同じタイムスタンプを持つ 2 つの行が存在する可能性がありますが、観察結果は異なります。基本的に、これらは時間が区別できなかった 2 つの異なるイベントでした。

今私の問題は、10秒または100秒ごと、または1000秒ごとにサブサンプリングすることにより、データシリーズをロールアップすることです。したがって、元のより粒度の高いデータ シリーズからスキミングされたデータ シリーズが必要です。どの行を使用するかを決定する方法はいくつかあります。たとえば、10 秒ごとにサブサンプリングしているとします。10 秒が経過すると、タイム スタンプが 10 秒の行が複数ある可能性があります。あなたはどちらかを取ることができます

1) first row
2) mean of all rows with the same timestamp of 10
3) some other technique

私はこれをパンダでやろうとしています。アイデアや開始方法は非常に高く評価されます。ありがとう。

4

1 に答える 1

1

これは、パンダで要求された操作を実行する方法を示す簡単な例です。

1 つはデータ ビニングを使用して、サンプルをグループ化し、データを再サンプルします。

import pandas as pd

# Creation of the dataframe
df = pd.DataFrame({\
'Time(s)':[0 ,0 ,0 ,1 ,2],\
'Pressure':[10, 9.9, 10.1, 10, 11],\
'Humidity':[5 ,5.1 ,5 ,4.9 ,6]})

# Select time increment
delta_t = 1

timeCol = 'Time(s)'
# Creation of the time sampling
v = xrange(df[timeCol].min()-delta_t,df[timeCol].max()+delta_t,delta_t)
# Pandas magic instructions with cut and groupby
df_binned = df.groupby(pd.cut(df[timeCol],v))
# Display the first element
dfFirst = df_binned.head(1)
# Evaluate the mean of each group
dfMean = df_binned.mean()
# Evaluate the median of each group
dfMedian = df_binned.median()
# Find the max of each group
dfMax = df_binned.max()
# Find the min of each group
dfMin = df_binned.min()

結果は次のようになりますdfFirst

           Humidity  Pressure  Time(s)
Time(s)
(-1, 0] 0       5.0        10        0
(0, 1]  3       4.9        10        1
(1, 2]  4       6.0        11        2    

結果は次のようになりますdfMean

         Humidity  Pressure  Time(s)
Time(s)
(-1, 0]  5.033333        10        0
(0, 1]   4.900000        10        1
(1, 2]   6.000000        11        2 
于 2014-05-02T21:46:56.130 に答える