У меня есть 3 блока данных панды (аналогично приведенному ниже). У меня есть 2 списка list ID_1 = ['sdf', 'sdfsdf', ...]
и list ID_2 = ['kjdf', 'kldfjs', ...]
Как умножить выбранные столбцы из разных кадровых фреймов pandas
Table1:
ID_1 ID_2 Value
0 PUFPaY9 NdYWqAJ 0.002
1 Iu6AxdB qANhGcw 0.01
2 auESFwW jUEUNdw 0.2345
3 LWbYpca G3uZ_Rg 0.0835
4 8fApIAM mVHrayg 0.0295
Table2:
ID_1 weight1 weight2 .....weightN
0 PUFPaY9
1 Iu6AxdB
2 auESFwW
3 LWbYpca
Table3:
ID_2 weight1 weight2 .....weightN
0 PUFPaY9
1 Iu6AxdB
2 auESFwW
3 LWbYpca
Я хочу иметь один dataframe, который должен быть рассчитан как,
for each x ID_1 in list1:
for each y ID_2 in list2:
if x-y exist in Table1:
temp_row = (x[weights[i]].* y[weights[i]])
# here i want one to one multiplication, x[weight1]*y[weight1] , x[weight2]*y[weight2]
temp_row.append(value[x-y] in Table1)
new_dataframe.append(temp_row)
return new_dataframe
Необходимое new_dataframe должен выглядеть table4:
Table4:
weight1 weight2 weight3 .....weightN value
0
1
2
3
Я я могу сделать сейчас:
new_df = df[(df.ID_1.isin(list1)) & (df.ID_2.isin(list2))]
используя это, я все действую ID_1
и ID_2
сочетание и значения. Но я понятия не имею, как я могу получить умножение весов как с именами данных (без циклов для каждого weight[i]
)?
Теперь задача проще, я могу перебрать new_df
for each row in new_df
и я найду weight[i to n] for ID_1 from table 2
и weight[i to n] for ID_2 from table3
. Затем я могу добавить их one-one multiplication
с "value" from table1
на новый FINAL_DF
. Но я не хочу зацикливаться и делать, мы можем решить это, используя более умный способ?
Обновлено в вопросе. Я не уверен, есть ли у нас какие-либо опции, не используя цикл. – impossible
, пожалуйста, проверьте мой ответ – MaxU