私はdatetime型の列とfloat型の列を持つデータフレームを持っています。パンダ:datetimeの複合条件
date value 0 2010-01-01 01:23:00 21.2 1 2010-01-02 01:33:00 63.4 2 2010-01-03 06:02:00 80.6 3 2010-01-04 06:05:00 50.1 4 2010-01-05 06:20:00 346.5 5 2010-01-06 07:44:00 111.8 6 2010-01-07 08:00:00 113.1 7 2010-01-08 08:22:00 10.6 8 2010-01-09 09:00:00 287.2 9 2010-01-10 09:14:00 1652.6
新しい列を作成して、現在の反復行時刻の1時間前の平均値を記録したいとします。
[UPDATE]例:
現在の反復が4 2010-01-05 06:20:00 346.5
ある場合、私は(50.1 + 80.6)/2
(範囲2010-01-05 05:20:00~2010-01-05 06:20:00
の値を平均計算)を計算する必要があります。私は次のコードのように、この問題を解決するためにiterrows()
を使用
date value before_1hr_mean 4 2010-01-05 06:20:00 346.5 65.35
。しかし、この方法は本当に遅く、機能iterrows()
は通常パンダで推奨されていないと、この行のようになります
[UPDATE]
df['before_1hr_mean'] = np.nan
for index, row in df.iterrows():
df.loc[index, 'before_1hr_mean'] = df[(df['date'] < row['date']) & \
(df['date'] >= row['date'] - pd.Timedelta(hours=1))]['value'].mean()
このような状況に対処するためのより良い方法はありますか?
あなたの例が数日ごとに増えていることを理解していますか?結果が元のデータと同じであることを意味します。この例では、1行の平均をとっています。 – piRSquared
また、 'df ['date'] <= row ['date']'は現在の行の値を平均値に含めることを意味します。しかし、あなたの計算例では、現在の行の値を除外します。これはまた、最初の行の計算がnullになることを意味します。 – piRSquared
私の間違ったコードを申し訳ありません。私は等号を間違った位置に置いた。あなたのコードから多くのことを学んでください。この場合、nullまたはNanは大丈夫です。 – zue