【问题标题】:How to efficiently pass an array to a data frame?如何有效地将数组传递给数据框?
【发布时间】:2017-03-23 11:14:46
【问题描述】:

我在数据框 DF1 的列上运行 PCA,它返回一个主成分数组。 我想创建一个数据框 DF2,它与 DF1 具有相同的索引,并且包含主成分数组中的值。

来自

 DF1=
                   v1       v2       v3
     2014-01-02   0.58     0.89    -0.19
     2014-01-03  -1.96     0.59     1.24
     2014-01-04   2.06    -0.15     3.54
     2014-01-05   0.31     1.25    -2.42
     2014-01-06   1.31     0.33     0.89
     ...          ...       ...      ...

PCs=
array([[ 0.14411173, -0.25557942,  0.08295314, ..., -0.24914411,
        -0.35242784,  0.17412245],
       [ 0.15391876, -0.3063616 , -0.62369197, ...,  0.18915513,
        -0.39056901,  0.23227158],
       [-0.00493105, -0.31936978,  0.35831582, ..., -0.2781707 ,
        -0.29810411,  0.27513239],
       [-0.5870741 ,  0.16183593,  0.10528634, ..., -0.21776753,
        -0.30365561,  0.17920256],
       [-0.6353732 , -0.28649561, -0.21702067, ...,  0.36312823,
        -0.11915208, -0.36003616]])

(在 PCs 数组中,每一行都是一个 PC) 获取

DF2=
                          PC1         PC2         PC3
         2014-01-02   0.14411173  -0.15391876    ...
         2014-01-03   0.25557942  -0.39056901
         2014-01-04   ...
         2014-01-05   
         2014-01-06   
         ...          ...       ...      ...
  1. 如何高效地将 PC 数组放入数据框中?
  2. 有没有比在数据帧上运行 PCA 然后将数组合并到新数据帧中更好、更有效的方法来获得我想要的结果? (例如,一种直接在数据框中获取 PC 的方法)

【问题讨论】:

    标签: python pandas dataframe pca


    【解决方案1】:

    您可以在显式传递df1 的索引并转置pca 数组的同时创建一个新的pandas DataFrame。

    首先创建一些虚拟数据:

    import pandas as pd
    import numpy as np
    
    df1 = pd.DataFrame(np.random.random(size=(3, 5)), index=pd.date_range(start="2014-01-02", periods=3))
    print(df1)
    
                       0         1         2         3         4
    2014-01-02  0.875032  0.853087  0.686504  0.682114  0.199243
    2014-01-03  0.522381  0.606048  0.398451  0.799883  0.030091
    2014-01-04  0.489119  0.997239  0.021816  0.307509  0.099752
    
    # create dummy pca results
    pca = np.random.random(size=(2, 3))
    print(pca)
    
    [[ 0.42791681  0.56512179  0.44731657]
     [ 0.10763007  0.35437208  0.79968957]]
    

    现在,构建列名,并在传递索引和列以及转置的 pca 数组的同时创建 pandas DataFrame:

    columns = ["PC{}".format(x + 1) for x in range(pca.shape[0])]
    df2 = pd.DataFrame(pca.T, index=df1.index, columns=columns)
    print(df2)
    
                     PC1       PC2
    2014-01-02  0.427917  0.107630
    2014-01-03  0.565122  0.354372
    2014-01-04  0.447317  0.799690
    

    回答您的第二个问题:我认为没有更有效的方法直接创建 DataFrame。

    【讨论】:

      猜你喜欢
      • 2021-05-27
      • 1970-01-01
      • 1970-01-01
      • 2020-04-13
      • 1970-01-01
      • 2018-05-28
      • 2017-08-08
      • 2021-02-03
      • 1970-01-01
      相关资源
      最近更新 更多