在数据帧上执行for循环的更快选择?

时间:2019-04-05 14:38:58

标签: python pandas

我有一个数据帧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

2 个答案:

答案 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中的那些索引。