каков наилучший способ объединить pandas.Фрейм данных с pandas.Серия на основе имен df.columns и Series.index?

#python #pandas #dataframe #series

#python #pandas #фрейм данных #Серии

Вопрос:

я столкнулся со следующей проблемой, и я не знаю, каков самый чистый / умный способ ее решения. У меня есть фрейм данных с именем wfm, который содержит входные данные для моего моделирования

         wfm.head()
Out[51]: 
   OPN  Vin  Vout_ref  Pout_ref  CFN  ...  Cdclink      Cdm         L     k    ron
0    6  350       750     80500    1  ...  0.00012  0.00012  0.000131 -0.37  0.001
1    7  400       800     92000    1  ...  0.00012  0.00012  0.000131 -0.37  0.001
2    8  350       900     80500    1  ...  0.00012  0.00012  0.000131 -0.37  0.001
3    9  450       750    103500    1  ...  0.00012  0.00012  0.000131 -0.37  0.001
4   10  450       900    103500    1  ...  0.00012  0.00012  0.000131 -0.37  0.001

[5 rows x 13 columns]
  

затем в каждом цикле моделирования я получаю 2 серии outputs_rms и outputs_avg, которые выглядят следующим образом:

 outputs_rms                             outputs_avg 
Out[53]:                                Out[54]:    
time.rms                0.057751        time.avg    5.78E-02
Vi_dc.voltage.rms       400             Vi_dc.voltage.avg   4.00E 02
Vi_dc.current.rms       438.333188      Vi_dc.current.avg   3.81E 02
Vi_dc.power.rms         175333.2753     Vi_dc.power.avg 1.53E 05
Am_in.current.rms       438.333188      Am_in.current.avg   3.81E 02
Cdm.voltage.rms         396.614536      Cdm.voltage.avg 3.96E 02
Cdm.current.rms         0.213185        Cdm.current.avg -5.14E-05
motor_phU.current.rms   566.035833      motor_phU.current.avg   -5.67E 02
motor_phU.voltage.rms   296.466083      motor_phU.voltage.avg   -9.17E-02
motor_phV.current.rms   0.061024        motor_phV.current.avg   2.58E-02
motor_phV.voltage.rms   1.059341        motor_phV.voltage.avg   -1.24E-09
motor_phW.current.rms   566.005071      motor_phW.current.avg   5.67E 02
motor_phW.voltage.rms   297.343876      motor_phW.voltage.avg   9.17E-02
S_ULS.voltage.rms       305.017804      S_ULS.voltage.avg   2.65E 02
S_ULS.current.rms       358.031053      S_ULS.current.avg   -1.86E 02
S_UHS.voltage.rms       253.340047      S_UHS.voltage.avg   1.32E 02
S_UHS.current.rms       438.417985      S_UHS.current.avg   3.81E 02
S_VLS.voltage.rms       295.509073      S_VLS.voltage.avg   2.64E 02
S_VLS.current.rms       0               S_VLS.current.avg   0.00E 00
S_VHS.voltage.rms       152.727975      S_VHS.voltage.avg   1.32E 02
S_VHS.current.rms       0.061024        S_VHS.current.avg   -2.58E-02
S_WLS.voltage.rms       509.388666      S_WLS.voltage.avg   2.64E 02
S_WLS.current.rms       438.417985      S_WLS.current.avg   3.81E 02
S_WHS.voltage.rms       619.258959      S_WHS.voltage.avg   5.37E 02
S_WHS.current.rms       357.982417      S_WHS.current.avg   -1.86E 02
Cdclink.voltage.rms     801.958092      Cdclink.voltage.avg 8.02E 02
Cdclink.current.rms     103.73088       Cdclink.current.avg 2.08E-05
Am_out.current.rms      317.863371      Am_out.current.avg  1.86E 02
Vo_dc.voltage.rms       800             Vo_dc.voltage.avg   8.00E 02
Vo_dc.current.rms       317.863371      Vo_dc.current.avg   -1.86E 02
Vo_dc.power.rms         254290.6969     Vo_dc.power.avg -1.49E 05
CFN                     1               CFN 1.00E 00
OPN                     6               OPN 6.00E 00
dtype:                  float64         dtype:  float64
  

тогда моя цель — разместить outputs_rms и outputs_avg в правой строке wfm на основе значений ‘CFN’ и ‘OPN’.

каковы ваши предложения? спасибо Риккардо

Комментарии:

1.В wfn является ли каждая строка отдельным циклом моделирования (который производит 2 Series outputs_rms и outputs_avg ?

2. да, исправьте, wfm — это df, вместо этого ряд должен располагаться горизонтально последовательно

Ответ №1:

Предположим, что вы создаете эти серии в качестве выходных данных output_rms_1, output_rms_2 и т.д., Чем серия может быть объединена в один фрейм данных

 import pandas as pd
dfRms = pd.DataFrame([output_rms_1, output_rms_2, output_rms_3])
  

Следующий вывод, скажем output_rms_10, может быть просто добавлен с помощью:

 dfRms = dfRms.append(output_rms_10, ignore_index=True)
  

Наконец, когда все выходные данные объединены в один фрейм данных,
вы можете объединить исходный wfm с выводом, т.Е.

 result = pd.merge(wfm, dfRms, on=['CFN', 'OPN'], how='left')
  

Аналогично для avg.

Комментарии:

1. спасибо, я решил аналогичным образом. Что я хотел сделать, так это заполнить df построчно, оставив NaN там, где я еще не писал 🙂