[英]how to use numpy vectorization for mutiple datasets, and then call a function?
我有一個包含名稱和日期的數據集。 我需要將它們與具有名稱和日期的其他數據集進行比較,如果名稱在其中,則調用另一個 function,在示例中我只是模擬了一個返回,它將分配給 dataframe 中的一個新列。 但我找不到如何。 這是我到目前為止所做的:*我需要使用 numpy 矢量化
def getName(name, date, df1, df2):
if name == df1['NAME'].values:
return name
if name == df2['NAME'].values:
return 'HEY'
df = pd.DataFrame({
"NAME": ["JOE", "CHRIS", "AARON"],
"DATE": [10, 20, 30]
})
df1 = pd.DataFrame({
"NAME": ["JOE", "JASON", "GUS"],
"DATE": [10, 20, 30]
})
df2 = pd.DataFrame({
"NAME": ["STEPHEN", "CHRIS", "AARON"],
"DATE": [10, 20, 30]
})
df['NAME_'] = getname(df['NAME'].values, df['DATE'].values, df1, df2)
output 應該是:
df =
NAME DATE NAME_
JOE 10 JOE
CHRIS 20 HEY
AARON 30 HEY
因此,您正在使用==
運算符測試相等性,這將評估 False 因為name
是str
而df1['NAME']
是Series
。 我認為您想測試name
是否在列中。 您可以使用if name in df1['NAME'].values
類的構造來執行此操作。
但是,即使您修復了 function,您也不能只調用一次getName
並獲得您正在尋找的結果。 通常,您可以使用apply
以便為df
的每一行調用 function 。 您可以使用df['NAME'].apply(getname, axis=1)
來做到這一點。 但這沒有使用矢量化,因為apply
是幕后的循環。
所以也許你可以使用join
df1['NAME_'] = df1['NAME']
df2['NAME_'] = 'HEY'
df3 = pd.concat([df2, df3]).set_index('NAME')
df.join(df3['NAME_'], on='NAME', how='left')
Output
NAME DATE NAME_
0 JOE 10 JOE
1 CHRIS 20 HEY
2 AARON 30 HEY
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.