Расчет по столбцам в Dataframes - PullRequest
0 голосов
/ 06 октября 2019

Я использую Python 3 с пандами. У меня есть два фрейма данных и на основе значения двух столбцов я хочу выполнить умножение ...

первая структура фрейма данных ...

index check_column1 check_column2 value

вторая структура DF

index check_column1 check_column2 value_to_multiply

идея в том, что ...

1. check_column1 and check_column2 columns are presented in both DF.
2. Need to update data frame 1 with new column (say 'calculated value')
3. this new column value will be calculated using below logic...
   a. for every row in df 1, find the matching row in df2 based on check_column1 and check_column2 values
   b. if match found, then update df1 with logic like df1['calculated value'] = df1['value'] * df2['value_to_multiply']

Я могу сделать это, перебирая строку за строкой ...

for index, row in inputDf.iterrows():
matchFound= df2.query('check_column1 =="{0}" and check_column2 == "{1}"'.format(row['check_column1']
                                                                                ,row['check_column2']))
               if(len(matchFound.index) > 0):
                   newValue= float(row['value']) * matchFound['value_to_multiply']



               df1.at[index,'calculated Value'] = newValue

Эта логика работает отлично, ноочень медленно.

У меня есть еще одна идея, если бы мы могли сделать умножение по столбцам, как показано ниже ...

df1['calculated value']=df1['value']*df1['value_to_multiply']

это было бы намного быстрее. но проблема в том, что мне нужно объединить оба df на основе check_columns, а затем я могу выполнить расчет, который снова будет медленнее. Я говорю о строках 5M-6M в df1 и около 4K строк в df2.

Есть ли другой способ добиться того же или я могу указать логику в терминах столбцов вместо строк.

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