我希望通過識別“任務”列狀態在資料框中創建一個新列“isRunning”。另外,我有一個“會話”列,如果一個會話在任務中只有 START 值而沒有 END 值(例如,會話 3 只有 START val),所以“isRunning”應該有 TRUE 標志,直到該會話結束.
| 會議 | 任務 | 在跑 | |
|---|---|---|---|
| 0 | 1 | 開始 | 真的 |
| 1 | 1 | 真的 | |
| 2 | 1 | 真的 | |
| 3 | 1 | 真的 | |
| 4 | 1 | 結尾 | 真的 |
| 5 | 1 | 錯誤的 | |
| 6 | 2 | 錯誤的 | |
| 7 | 2 | 開始 | 真的 |
| 8 | 2 | 真的 | |
| 9 | 2 | 結尾 | 真的 |
| 10 | 2 | 錯誤的 | |
| 11 | 2 | 錯誤的 | |
| 12 | 3 | 錯誤的 | |
| 13 | 3 | 開始 | 真的 |
| 14 | 3 | 真的 | |
| 15 | 3 | 真的 | |
| 16 | 4 | 錯誤的 | |
| 17 | 4 | 開始 | 真的 |
| 18 | 4 | 真的 | |
| 19 | 4 | 真的 | |
| 20 | 4 | 結尾 | 真的 |
不確定如何繼續添加額外條件并確定任務是否正在運行。
import pandas as pd
d = {'Session':[1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4],
'Task':['START', '', '', '', 'END', '', '', 'START', '', 'END', '', '', '', 'START', '', '', '', 'START', '', '', 'END']}
df = pd.DataFrame(data=d)
uj5u.com熱心網友回復:
假設每組一個開始/結束。您可以使用雙重面具:
m1 = df['Task'].eq('START').groupby(df['Session]').cummax()
m2 = df.loc[::-1, 'Task'].eq('END').groupby(df['Session']).cummax()
df['IsRunning'] = m1&m2
如果每個會話可以有多個開始/結束:
df['IsRunning'] = (df['Task'].map({'START': True, 'END': False})
.groupby(df['Session']).ffill()
.fillna(False)
) | df['Task'].eq('END')
輸出:
Session Task IsRunning
0 1 START True
1 1 True
2 1 True
3 1 True
4 1 END True
5 1 False
6 2 False
7 2 START True
8 2 True
9 2 END True
10 2 False
11 2 False
12 3 False
13 3 START True
14 3 True
15 3 True
16 4 False
17 4 START True
18 4 True
19 4 True
20 4 END True
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/525768.html
標籤:Python熊猫数据框
上一篇:在偶數、不偶數索引上顯示具有相同和的n位數。Python
下一篇:將字串分離到資料框中
