Как использовать numpy векторизация для множественных наборов данных, а затем вызвать функцию? - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть набор данных, который содержит имя и дату. И мне нужно сравнить их с другими наборами данных, которые имеют имя и дату, и вызвать другую функцию, если в ней есть имя, в примере, который я только что посмеялся над возвратом, который будет назначен новому столбцу в кадре данных. Но я не мог найти как. Вот что я сделал до сих пор: * Мне нужно использовать 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)

Вывод должен быть:

df = 
NAME DATE NAME_
JOE   10   JOE
CHRIS 20   HEY
AARON 30   HEY

1 Ответ

0 голосов
/ 27 апреля 2020

Итак, вы проверяете равенство с помощью оператора ==, который оценивает значение False, поскольку name - это str, а df1['NAME'] - это Series. Я думаю, что вы хотите проверить, если name в столбце. Вы можете сделать это с помощью такой конструкции, как if name in df1['NAME'].values.

Но, даже если вы исправите функцию, вы не сможете вызвать getName только один раз и получить искомый результат. Как правило, вы можете использовать apply, поэтому функция вызывается для каждой строки df. Вы можете сделать это с помощью df['NAME'].apply(getname, axis=1). Но это не использует векторизацию, поскольку apply - это всего лишь oop за кадром.

Так что, возможно, вы могли бы использовать 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...