Pandas 多次过滤具有多个条件的数据帧

Pandas 多次过滤具有多个条件的数据帧,pandas,dataframe,filter,Pandas,Dataframe,Filter,我有这个数据框top100(100个独特的城市和州) 和数据帧数据库(1000000行) 如何使用top100过滤df?结果将与数据库的格式相同,但仅限于top100数据框中的前100个城市。 这是我目前拥有的 def filter_city(): # Initialize an empty dataframe to store result d = {'state': [], 'city':[], 'data':[]} df = pd.DataFrame(d) # L

我有这个数据框top100(100个独特的城市和州)

和数据帧数据库(1000000行)

如何使用top100过滤df?结果将与数据库的格式相同,但仅限于top100数据框中的前100个城市。 这是我目前拥有的

def filter_city():
   # Initialize an empty dataframe to store result
   d = {'state': [], 'city':[], 'data':[]}
   df = pd.DataFrame(d)

   # Loop through each city in top 100
   for i in range(len(top100['city'])):
        tempCity = database[database['city'].str.contains(top100['city'][i]) & 
                             database['state'].str.contains(top100['state'][i])].copy()
        df = df.append(tempCity)
   return df

这个函数需要很长时间。我想知道有没有更快的方法

你是否做了
database.merge(top100,on=['city','state'])
?嗨,COLDSPEED,我刚刚尝试了上面的方法。结果是7540行,而使用my函数,结果是9073行(它们是唯一的)。我不知道为什么。编辑:我的函数使用contains,因此结果同时包括“Las Vegas”和“North Las Vegas”。您的函数可能是正确的。非常感谢。
city            state          data
Las Vegas       Nevada         Las.Vegas.Nevada.2
Las Vegas       Nevada         Las.Vegas.Nevada.4
.....    
Boston          Massachusetts  Boston.Massachusetts.47
Boston          Massachusetts  Boston.Massachusetts.48
.....
Richmond        Virginia       Richmond.Virginia.34
....
def filter_city():
   # Initialize an empty dataframe to store result
   d = {'state': [], 'city':[], 'data':[]}
   df = pd.DataFrame(d)

   # Loop through each city in top 100
   for i in range(len(top100['city'])):
        tempCity = database[database['city'].str.contains(top100['city'][i]) & 
                             database['state'].str.contains(top100['state'][i])].copy()
        df = df.append(tempCity)
   return df