Pandasを勉強中の者です。
以下、困っているためご教授願います。
実現したいこと
対象となる基データ
※以下6行目、強制終了してしまうとプロセスの番号が残らず、1行だけ出力される
日時 | ユーザ | プロセス | 状態 |
---|---|---|---|
2024/6/12 9:10:20 | AAA | 50 | START |
2024/6/12 9:20:10 | AAA | 50 | END |
2024/6/12 10:00:00 | AAA | 100 | START |
2024/6/12 10:10:00 | AAA | 200 | START |
2024/6/12 10:20:10 | AAA | 300 | START |
2024/6/12 10:30:10 | AAA | NaN | END |
2024/6/12 12:00:10 | AAA | 100 | START |
2024/6/12 12:10:20 | AAA | 200 | START |
2024/6/12 12:20:10 | AAA | 200 | END |
2024/6/12 12:40:50 | AAA | 100 | END |
2024/6/12 16:10:20 | BBB | 500 | START |
2024/6/12 16:20:10 | BBB | 500 | START |
2024/6/13 08:10:20 | CCC | 500 | START |
期待するデータ
ユーザ | プロセス | END | START |
---|---|---|---|
AAA | 100 | 2024/6/12 10:30:10 | 2024/6/12 10:00:00 |
AAA | 200 | 2024/6/12 10:30:10 | 2024/6/12 10:10:00 |
AAA | 300 | 2024/6/12 10:30:10 | 2024/6/12 10:20:10 |
AAA | 50 | 2024/6/12 9:20:10 | 2024/6/12 9:10:20 |
BBB | 500 | 2024/6/12 16:20:10 | 2024/6/12 16:10:20 |
CCC | 500 | NaN | 2024/6/13 8:10:20 |
AAA | 100 | 2024/6/12 12:20:10 | 2024/6/12 12:00:10 |
AAA | 200 | 2024/6/12 12:40:50 | 2024/6/12 12:10:20 |
該当のソースコード
python
1import pandas as pd 2import io 3 4csv_data = ''' 5日時,ユーザ,プロセス,状態 62024/06/12 9:10:20,AAA,50,START 72024/06/12 9:20:10,AAA,50,END 82024/06/12 10:00:00,AAA,100,START 92024/06/12 10:10:00,AAA,200,END 102024/06/12 10:20:10,AAA,300,START 112024/06/12 10:30:10,AAA,,END 122024/06/12 12:00:10,AAA,100,START 132024/06/12 12:10:20,AAA,200,START 142024/06/12 12:20:10,AAA,200,END 152024/06/12 12:40:50,AAA,100,END 162024/06/12 16:10:20,BBB,500,START 172024/06/12 16:20:10,BBB,500,START 182024/06/13 8:10:20,CCC,500,START 19''' 20 21df = pd.read_csv(io.StringIO(csv_data), dtype=str) 22df['日時'] = pd.to_datetime(df['日時']) 23print(df) 24 25df['キー'] = df.groupby(['状態', 'ユーザ', 'プロセス']).cumcount() 26df2 = df.pivot_table(index=['キー', 'ユーザ', 'プロセス'], columns='状態', values='日時').reset_index() 27df2 = df2.drop(columns=['キー']) 28print(df2)
試したこと
25行目のcumcount関数を使って累積和を求めても、プロセスが重複しているため、
以下の様になり、期待するデータのように出力ができません。(NaTは後で埋める予定)
ユーザ | プロセス | END | START |
---|---|---|---|
AAA | 100 | 2024/6/12 12:40:50 | 2024/6/12 10:00:00 |
AAA | 200 | 2024/6/12 12:20:10 | 2024/6/12 10:10:00 |
AAA | 300 | NaN | 2024/6/12 10:20:10 |
AAA | 50 | 2024/6/12 9:20:10 | 2024/6/12 9:10:20 |
BBB | 500 | 2024/6/12 16:20:10 | 2024/6/12 16:10:20 |
CCC | 500 | 2024/6/13 8:10:20 | NaN |
AAA | 100 | NaT | 2024/6/12 12:00:10 |
AAA | 200 | NaT | 2024/6/12 12:10:20 |
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2024/06/16 23:58
2024/06/17 15:09 編集