基于df.columns和Series.index名称将pandas.Dataframe与pandas.Series合并的最佳方法是什么?

时间:2019-03-05 10:20:00

标签: python pandas dataframe series

我正面临以下问题,我不知道什么是最干净/最聪明的解决方案。 我有一个名为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

然后我的目标是基于'CFN'和'OPN'值将output_rms和output_avg放在wfm的右行。

您有什么建议? 谢谢 里卡多

1 个答案:

答案 0 :(得分: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)

最后,当所有输出都合并到一个Dataframe中时, 您可以将原始wfm与输出合并,即

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

类似地表示平均值。