我有一个包含2列(事件和事件)的DataFrame。事件列包含特定的事件ID,事件列包含事件ID的列表。
示例:-
df
event events
'a' ['x','y','abc','a']
'b' ['x','y','c','a']
'c' ['a','c']
'd' ['b']
我想创建另一个列(eventoccured)以指示事件是否在事件中。
eventoccured
1
0
1
0
我当前正在使用
df['eventoccured']= df.apply(lambda x: x['event'] in x['events'], axis=1)
可以提供所需的结果,但速度较慢,为此,我需要更快的解决方案。
谢谢
答案 0 :(得分:1)
一个想法是使用列表理解:
#40k rows
df = pd.concat([df] * 10000, ignore_index=True)
In [217]: %timeit df['eventoccured']= df.apply(lambda x: x['event'] in x['events'], axis=1)
1.15 s ± 36.1 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
In [218]: %timeit df['eventoccured1'] = [x in y for x, y in zip(df['event'], df['events'])]
15.2 ms ± 135 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)