迭代通过大熊猫行有效
问题描述:
我有一个看起来像这样的列表:迭代通过大熊猫行有效
lst = ['a','b','c']
和看起来像这样一个数据帧:
id col1
1 ['a','c']
2 ['b']
3 ['b', 'a']
我期待在数据帧来创建一个新列它具有col1的第一个和单个列表的交集的长度
id col1 intersect
1 ['a','c'] 2
2 ['b'] 1
3 ['d', 'a'] 1
目前我的代码看起来像这样的:
df['intersection'] = np.nan
for i, r in df.iterrows():
## If-Statement to deal with Nans in col1
if r['col1'] == r['col1']:
df['intersection'][i] = len(set(r['col1']).intersection(set(lst)))
的问题是,这个代码是非常耗时在我的200K行的数据集,并与200个元素的列表相交。有没有办法更有效地做到这一点?
谢谢!
答
你试过吗?
lstset = set(lst)
df['intersection'] = df['col1'].apply(lambda x: len(set(x).intersection(lstset)))
另一种可能性是
df['intersection'] = df['col1'].apply(lambda x: len([1 for item in x if item in lst]))
+0
呃!即时通讯这样的假人!!!!!! – eljusticiero67
为什么需要if语句?它看起来总是对我真实? – Psidom
检查nans。如果x是nan,x == x将返回false。 – eljusticiero67