优化列交叉点的熊猫操作

时间:2019-09-19 10:32:43

标签: python-3.x pandas

我有一个包含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)

可以提供所需的结果,但速度较慢,为此,我需要更快的解决方案。

谢谢

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)