を使用して日時インデックス付きのデータフレームをリサンプリングする
を使用してデータフレームをリサンプリングは、私は、このデータフレームを持っていると言う:
value
00:00, 01/05/2017 2
12:00, 01/05/2017 4
00:00, 02/05/2017 6
12:00, 02/05/2017 8
00:00, 03/05/2017 10
12:00, 03/05/2017 12
そして、私は(これは簡単にするためにここにオリジナルと同じですが、なくてもかまいません)12時間の「粒度」で06:00, 01/05/2017
から
18:00 02/05/2017
に行くためにそれをリサンプリングします。私が欲しい結果は次のとおりです。値は、彼らが(例えば3 =平均(2,4))重複した値の平均値であることを
value
06:00, 01/05/2017 3
18:00, 01/05/2017 5
06:00, 02/05/2017 7
18:00, 02/05/2017 9
注
私はこれを行う方法がわかりませんよ。
私の最初の試みでした:これは、適切なデータフレームをトリミングして、正しい精度を保証しますが、結果があるので、開始日との結果を合わせていない
def resample(df: DataFrame, start: datetime, end: datetime, granularity: timedelta) -> DataFrame:
result = df.resample(granularity).mean()
result = result[result.index <= end]
result = result[result.index >= start]
return result
:
value
12:00, 01/05/2017 4
00:00, 02/05/2017 6
12:00, 02/05/2017 8
私の2番目の試みは、base
パラメータを使ってデータをシフトしました:
def resample(df: DataFrame, start: datetime, end: datetime, desired_granularity: timedelta) -> DataFrame:
data_before_start = df[df.index <= start]
# Get the last index value before our start date
last_date_before_start = data_before_start.last_valid_index()
current_granularity_secs = seconds_between_measurements(df)
rule = str(int(desired_granularity.total_seconds())) + 'S'
base = current_granularity_secs - (start - last_date_before_start).total_seconds()
result = df.resample(rule, base=base).mean()
result = result[result.index < end]
result = result[result.index >= start]
return result
これは私を与える:
value
06:00, 01/05/2017 4
18:00, 01/05/2017 6
06:00, 02/05/2017 8
18:00, 02/05/2017 10
これは右のインデックスを有するが、値が前後の測定から次の測定からバックフィルではなく平均化されます。
誰かが私が欲しいものを達成する方法について考えている人はいますか?
あなたの助けを事前に感謝し、私はすべての重要な詳細を残してきたなら、私が知っている:)
EDIT: 平均値を得ることが、これは非常にトリッキーになるビットである場合、私は可能性がありpad()と同様に、指定された時刻より前の値を使用して解決します。私の現在のベストソリューションは、バックフィル()のように後に値を与えます