発電所の1日の最長連続稼働時間を評価するには、1日あたりの最長ストリークを評価する必要があります。つまり、1日は個別の時間枠と見なされます。
したがって、データフレームに電力出力があるとしましょうdf
。
df = pd.Series(
data=[
*np.zeros(4), *(np.full(24*5, 19.5) + np.random.rand(24*5)),
*np.zeros(4), *(np.full(8, 19.5) + np.random.rand(8)),
*np.zeros(5), *(np.full(24, 19.5) + np.random.rand(24)),
*np.zeros(27), *(np.full(24, 19.5) + np.random.rand(24))],
index=pd.date_range(start='2019-07-01 00:00:00', periods=9*24, freq='1h'))
そして、「カットオフパワー」は1
(それ以下のものはすべてオフと見なされます)です。これを使用して「オン」値をマスクし、シフトしてマスク自体と比較し、連続するの数をカウントしgroups
ます。最後に、インデックスで年groups
の日ごとにグループ化し、毎日の連続値をカウントしますconsec_group
。
mask = df > 1
groups = mask.ne(mask.shift()).cumsum()
consec_group = groups[mask].groupby(groups[mask].index.date).value_counts()
どちらが得られますか:
consec_group
Out[3]:
2019-07-01 2 20
2019-07-02 2 24
2019-07-03 2 24
2019-07-04 2 24
2019-07-05 2 24
2019-07-06 4 8
2 4
6 3
2019-07-07 6 21
2019-07-09 8 24
dtype: int64
ただし、連続する各毎日のストリークの最大値を設定したいので、ランタイムのない日付は、のようにゼロで表示する必要があります2019-07-08 7 0
。期待される結果を参照してください。
2019-07-01 20
2019-07-02 24
2019-07-03 24
2019-07-04 24
2019-07-05 24
2019-07-06 8
2019-07-07 21
2019-07-08 0
2019-07-09 24
dtype: int64
どんな助けでも大歓迎です!
まずすることにより、第2のレベルを削除するSeries.reset_index
と、コールバックにより、第2の重複値を除外し、Series.asfreq
-それは働いて、ため、.value_counts
ソートSeries
:
consec_group = (consec_group.reset_index(level=1, drop=True)[lambda x: ~x.index.duplicated()]
.asfreq('d', fill_value=0))
print (consec_group)
またはGroupBy.first
:による解決策
consec_group = (consec_group.groupby(level=0)
.first()
.asfreq('d', fill_value=0))
print (consec_group)
2019-07-01 20
2019-07-02 24
2019-07-03 24
2019-07-04 24
2019-07-05 24
2019-07-06 8
2019-07-07 21
2019-07-08 0
2019-07-09 24
Freq: D, dtype: int64
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加