TrueとFalseをDataFrameの特定の値に変換しようとしています。300秒未満の「time」変数のすべての時間を特定の数値(「1」など)に置き換えたいと考えています。300秒を超える任意の数(300秒未満)の後に任意の数が来ると、同じ特定の数「1」が取得されます。その番号(300秒よりも大きい)の後に続く番号は、常に300秒未満であり、「2」などの別の特定の番号を取得する必要があります。
これが私のコードです:
import time
from datetime import datetime, date, time, timedelta
from datetime import datetime as dt
import numpy as np
df['timestamp'] = pd.to_datetime (df['timestamp'])
df['delta'] = (df['timestamp']-df['timestamp'].shift())
df['time'] = df['delta'].dt.total_seconds()
df['outlier'] = df['time'] > 300
df['Column1'] = np.where(df['outlier'], np.where(df['time'] > 300, '1','1'),'na')
これが入力です。これは私が持っているDataFrameのサンプルです:
timestamp delta time outlier output
0 2020-11-08 17:54:53 NaT NaN False na
1 2020-11-08 17:54:56 0 days 00:00:03 3.0 False na
2 2020-11-08 17:54:57 0 days 00:00:01 1.0 False na
3 2020-11-08 21:04:41 0 days 03:09:44 11384.0 True 1
4 2020-11-08 21:04:52 0 days 00:00:11 11.0 False na
5 2020-11-08 21:04:53 0 days 00:00:01 1.0 False na
6 2020-11-10 20:36:32 1 days 23:31:39 171099.0 True 1
7 2020-11-10 20:37:01 0 days 00:00:29 29.0 False na
8 2020-11-10 20:37:04 0 days 00:00:03 3.0 False na
これは私が探している実際の出力です:
timestamp delta time outlier output
0 2020-11-08 17:54:53 NaT NaN False NaN
1 2020-11-08 17:54:56 0 days 00:00:03 3.0 False 1
2 2020-11-08 17:54:57 0 days 00:00:01 1.0 False 1
3 2020-11-08 21:04:41 0 days 03:09:44 11384.0 True 1
4 2020-11-08 21:04:52 0 days 00:00:11 11.0 False 2
5 2020-11-08 21:04:53 0 days 00:00:01 1.0 False 2
6 2020-11-10 20:36:32 1 days 23:31:39 171099.0 True 2
7 2020-11-10 20:37:01 0 days 00:00:29 29.0 False 3
8 2020-11-10 20:37:04 0 days 00:00:03 3.0 False 3
これはデータフレームのサンプルにすぎないことに注意してください。上記のコードを修正し、行数が多いデータフレームで機能するようにしてください。
このようなもの?
df['output'] = (df.outlier.cumsum() + 1).map(str).shift()
整数を好む場合:
df['output'] = (df.outlier.cumsum() + 1).map(int).astype(object).shift()
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加