簡體   English   中英

如何對多個數據集使用 numpy 向量化,然后調用 function?

[英]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 因為namestrdf1['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.

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