有没有比这更快的方法来检查pandas列中的字符串?我的循环花了很长时间才能完成

时间:2019-06-13 14:23:48

标签: python pandas

我有两个熊猫数据框。

我要一行一行地尝试检查df1 [column]中的值是否在df2 [column]中,并将此信息记录到df1中。

我在下面有一个“玩具”示例。但是我的实际数据集有150,000行。

下面的代码运行良好,但是在更大的数据集上,我实际上不得不停止内核,这花费了太长时间。

df1= pd.DataFrame([['1', 'a'],
                   ['2', 'b'],
                   ['3', 'b'],
                   ['4', 'z'],
                   ['5', 'e']], columns=['num', 'num_letter'])


# adding an extra column to record result of check for duplicates



df1['dupe'] = None


df2= pd.DataFrame([['1', 'a'],
                   ['2', 'b'],
                   ['3', 'b'],
                   ['4', 'd'],
                   ['5', 'e']], columns=['num', 'num_letter'])


for i in range(len(df1)):

    for k in df1['num_letter']:

# if value from df1 is found in df2 column,
# record the word 'dupe' to corresponding empty cell in df1. 

        if k in df2['num_letter'].values:

            df1.loc[i,'dupe'] = 'dupe'

        else:

            df1.loc[i,'dupe'] = 'not_dupe'

有没有更有效的方法?

谢谢大家

1 个答案:

答案 0 :(得分:2)

Numpy的in1dwhere

df1.assign(dupe=np.where(np.in1d(df1.num_letter, df2.num_letter), 'dupe', 'not_dupe'))

  num num_letter      dupe
0   1          a      dupe
1   2          b      dupe
2   3          b      dupe
3   4          z  not_dupe
4   5          e      dupe