簡體   English   中英

比較 numpy 數組中每個元素的矢量化方法

[英]vectorized way to compare each element in numpy array

我想知道是否有一種方法可以比較 numpy 數組中的每個元素(無論索引位置如何)。 我經常發現自己使用 pandas 數據幀中的 arrays 並且我想使用底層的 numpy 數組來比較每個元素。 我知道我可以像這樣進行快速元素比較:

dfarr1 = pd.DataFrame(np.arange(0,1000))
dfarr2 = pd.DataFrame(np.arange(1000,0,-1))
dfarr1.loc[(dfarr1.values == dfarr2.values)]
# outputs: 500

(顯然,上面只是一個玩具示例)但我想做的是相當於所有元素的兩個循環,但以盡可能快的方式:

for ir in df.itertuples():
   for ir2 in country_df.itertuples():
      if df['city'][ir[0]] == country_df['Capital'][ir2[0]]:
         df['country'][ir[0]] = country_df['Country'][ir2[0]]

問題是我的數據幀包含數千個元素,而上面的元素太慢了(尤其是考慮到我確信將來我會在不同的、同樣長的數據幀上執行類似的此類操作,因此一勞永逸地清除它一切都會好的)。 這個想法是我已經解析了幾千個文件並獲得了它們的地理數據(上面的=df),並且我有一個相當大的文件,其中包含城市及其對應的國家/地區作為查找(=country_df)。 這個想法是查看 df 中的城市是否與查找中的城市匹配,如果是,我想在 df 的新列(在同一行索引處)中添加相應的國家和解析的地理數據。 無論如何,這只是我需要(理想情況下)比上述方式更高的速度的一個例子。 非常感謝!

你可以試試這個:

 df1 = pd.DataFrame({'city': ['New York City', 'Los Angeles', 'Paris', 'Berlin', 'Beijing'], 
                     'country' : [None, None, None, None, None] })

df2 = pd.DataFrame({'city' : ['New York City', 'Paris', 'Berlin', 'Beijing', 'Los Angeles', 'Rome'],
                    'country': ['USA', 'France', 'Germany', 'China', 'USA', 'Italy']})

現在我們在df1上使用df2['country']系列作為填充值的fillna方法:

df1['country'] = df1.set_index('city')['country'].fillna(df2.set_index('city')['country'])\
                    .reset_index(drop=True)

print(df1)

    city          country
0   New York City  USA
1   Los Angeles    USA
2   Paris          France
3   Berlin         Germany
4   Beijing        China

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM