Pandas -在空白列中填入一些值

jq6vz3qz  于 2022-11-05  发布在  其他
关注(0)|答案(1)|浏览(116)

我希望通过标识“任务”列的状态在数据框中创建一个新列“isRunning”。此外,我有一个“会话”列,如果会话在任务中只有START值而没有END值(例如,会话3只有START值),则“isRunning”在该会话结束之前应具有TRUE标志。
| | 会话|工作|正在运行|
| - -|- -|- -|- -|
| 第0页|一个|启动|正确|
| 一个|一个||正确|
| 2个|一个||正确|
| 三个|一个||正确|
| 四个|一个|结束|正确|
| 五个|一个||错误|
| 六个|2个||错误|
| 七个|2个|启动|正确|
| 八个|2个||正确|
| 九个|2个|结束|正确|
| 10个|2个||错误|
| 十一|2个||错误|
| 十二个|三个||错误|
| 十三个|三个|启动|正确|
| 十四|三个||正确|
| 十五个|三个||正确|
| 十六岁|四个||错误|
| 十七岁|四个|启动|正确|
| 十八岁|四个||正确|
| 十九个|四个||正确|
| 20个|四个|结束|正确|
不确定如何继续添加额外条件并确定任务是否正在运行。

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)
rekjcdws

rekjcdws1#

假设每组有一个起点/终点。您可以使用双掩码:

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

相关问题