#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
является ли каждая строка отдельным циклом моделирования (который производит 2Series
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 там, где я еще не писал
![]()