我有一個像這樣的熊貓資料框:
Title Pgid Views30 Title_to
===============================================================================
30 Хо_Ен_Чон 9048639 284950 Чон_Хо_Ён
98 Mail.ru_Group 9018641 153082 VK_(компания)
105 Паша_Техник 9070663 143053 Техник,_Паша
303 Freeware 6166716 79998 Бесплатное_программное_обеспечение
399 СССР 1007 69349 Союз_Советских_Социалистических_Республик
該資料包含來自維基百科頁面資料的超過 120 萬條條目:
Title= 頁面標題Pgid= 頁面 IDViews30= 每月頁面瀏覽量Title_to= 此頁面重定向到的頁面的標題(或者NaN如果沒有重定向)
現在我想Pgid_to為所有帶有Title_to!=的頁面創建一個包含重定向目標頁面的頁面 ID 的新列NaN。也就是說,Pgid從Title=收集Title_to所有條目。
我目前的解決方案很簡單:
def cond(title_to):
try:
# get Pgid of page whose title == title_to
return df.loc[df['Title'] == title_to, 'Pgid']
except:
# return NaN on failure to locate
return np.NaN
# make new column by applying search element-wise
df['Pgid_to'] = df['Title_to'].apply(cond)
然而,這個演算法很可能需要多項式時間 (N^2),對于 1.2 MM 條目意味著 1.4 萬億次操作!可以優化嗎?可能,是否有矢量化解決方案?
uj5u.com熱心網友回復:
np.where()是矢量化的,希望能挽救這一天。請嘗試:
df['Pgid_to'] = np.where(df[Title'] == df['Title_co'], 'Pgid',np.nan)
如果要將其與 nan 進行比較:
df['Pgid_to'] = np.where(df[Title'].isna(),np.nan, 'Pgid')
uj5u.com熱心網友回復:
好的,通過簡單地將資料幀與其自身合并找到了一個解決方案!
df_merged = df.merge(df, 'left', left_on='Title',
right_on='Title_to', suffixes=(None, '_from'))
這會生成一個帶有“Pgid_from”列(以及其他列)的新資料框,然后可用于對資料進行分組。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/371451.html
下一篇:計算與文本的時差
