как передать векторный dataframe и l oop в функцию python pandas - PullRequest
1 голос
/ 29 апреля 2020

Мне нужно вызвать функцию, которая зацикливается в кадре данных, и вызывать различные функции в зависимости от того, находится ли имя столбца данных в другом кадре. Но я не могу найти самый эффективный и быстрый способ сделать это. Я пытался передать векторизованным способом, но это не похоже на работу. Также мне нужен способ сделать это быстрее, потому что исходный фрейм данных похож на 10k имен. Спасибо.

import pandas as pd
def multiply(value, date, df1, df2):
   if value in df1['name'].values:
      value_ = value * 2
   elif value in df2['name'].values:
       value_ = value * 3
   return value_

df=pd.DataFrame({"name": ['joe','jack'], "date":[30,20]})

df1=pd.DataFrame({"name": ['joe','ben'], "date":[10,70]})
df2=pd.DataFrame({"name": ['ian','jack'], "date":[10,20]})

df['returned'] = multiply(df['name'].values, df['date'].values, df1, df2)

1 Ответ

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

вы можете использовать np.select с isin как:

conditions = [df['name'].isin(df1['name']), df['name'].isin(df2['name'])]
choices = [df1['date']*2, df2['date']*3]
df['returned'] = np.select(conditions, choices)
print (df)
   name  date  returned
0   joe    30        20
1  jack    20        60
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...