0

I have large pandas dataframe (around million rows) and a list of id-s (length of array is 100,000). For each id in df1 I have to check if that id is in my list (called special) and flag it accordingly:

df['Segment'] = df['ID'].apply(lambda x: 1 if x in special else np.nan)

problem is that this is extremely slow, as for million id-s lambda expression checks if that id is in a list of 100,000 entries. Is there a faster way to accomplish this?

Ach113
  • 1,550
  • 2
  • 14
  • 34

1 Answers1

2

I recommend you see When should I ever want to use apply

Use Series.isin with Series.astype:

 df['Segment'] = df['ID'].isin(special).astype(int)

We can also use Series.view:

df['Segment'] = df['ID'].isin(special).view('uint8')

or numpy.where

df['Segment'] = np.where(df['ID'].isin(special),1 ,0)
ansev
  • 28,746
  • 5
  • 11
  • 29