使用 pandas 将具有复数值的数据框修改为具有实部和虚部的新多索引数据框

Modify dataframe with complex values into a new multiindexed dataframe with real and imaginary parts using pandas

我有一个包含复数的数据框,如下所示,

>>>df.head()
         96               98
1   3.608719+23.596415j 3.782185+22.818022j
2   7.239342+28.990936j 6.801471+26.978671j
3   3.671441+23.73544j  3.842973+22.940337j
4   3.935188+24.191112j 4.063692+23.269834j
5   3.544675+23.561207j 3.852818+22.951067j

我正在尝试从中创建一个新的多索引数据框,如下所示,

             96                     98  
       R           X           R           X
1   3.608719    23.596415   3.782185    22.818022
2   7.239342    28.990936   6.801471    26.978671
3   3.671441    23.73544    3.842973    22.940337
4   3.935188    24.191112   4.063692    23.269834
5   3.544675    23.561207   3.852818    22.951067

我曾尝试将它们拆分为真实和虚构的数据帧,然后 merge/concat 它们,但没有成功。

您可以使用:

df = pd.concat([df.apply(lambda x: x.real), df.apply(lambda x: x.imag)], 
               axis=1, 
               keys=('R','X')) \
       .swaplevel(0,1,1) \
       .sort_index(1)
print (df)
         96                   98           
          R          X         R          X
1  3.608719  23.596415  3.782185  22.818022
2  7.239342  28.990936  6.801471  26.978671
3  3.671441  23.735440  3.842973  22.940337
4  3.935188  24.191112  4.063692  23.269834
5  3.544675  23.561207  3.852818  22.951067

另一个解决方案:

a = df.values
mux = pd.MultiIndex.from_product([ ['R','X'], df.columns])
df1 = pd.DataFrame(np.concatenate([a.real, a.imag], axis=1), columns=mux)
        .swaplevel(0,1,1)
        .sort_index(1)
print (df1)
         96                   98           
          R          X         R          X
0  3.608719  23.596415  3.782185  22.818022
1  7.239342  28.990936  6.801471  26.978671
2  3.671441  23.735440  3.842973  22.940337
3  3.935188  24.191112  4.063692  23.269834
4  3.544675  23.561207  3.852818  22.951067