我有一个数据帧df,它有1000万行。我正在运行下面的循环,这需要大量时间才能执行。可以有更快的方法来完成相同的任务吗?
for i in range(len(df)):
if df['col_1'][i] in ('a','b', 'c', 'd', 'e'):
df.at[i,'col_2']=1
else:
df.at[i,'col_2']=0
答案 0 :(得分:2)
您可以使用numpy.where使用布尔逻辑来设置值:
import numpy as np
df["col2"] = np.where(df["col1"].isin(('a','b', 'c', 'd', 'e')), 1, 0)
答案 1 :(得分:1)
您可以使用基于loc-index的过滤。这段代码可以解决这个问题:
list1 = ['a', 'b', 'c', 'd', 'e']
df.loc[:, 'col2'] = 0
df.loc[df['col1'].isin(list1), 'col2'] = 1
因此,默认情况下,我们首先为col2
分配一个零,然后给一个索引,但仅分配给col1
值在list1
中的那些索引。