zoukankan      html  css  js  c++  java
  • pandas中DataFrame类的pivot_table函数------Reshaping by pivoting DataFrame objects

    以下内容为截取自pandas官网的doc(请看这里),我做了一些翻译.

    Reshaping by pivoting DataFrame objects

    Data is often stored in CSV files or databases in so-called “stacked” or “record” format:

    In [1]: df
    Out[1]: 
             date variable     value
    0  2000-01-03        A  0.469112
    1  2000-01-04        A -0.282863
    2  2000-01-05        A -1.509059
    3  2000-01-03        B -1.135632
    4  2000-01-04        B  1.212112
    5  2000-01-05        B -0.173215
    6  2000-01-03        C  0.119209
    7  2000-01-04        C -1.044236
    8  2000-01-05        C -0.861849
    9  2000-01-03        D -2.104569
    10 2000-01-04        D -0.494929
    11 2000-01-05        D  1.071804

    以下为一个DataFrame对象的创建过程:

    1 import pandas.util.testing as tm; tm.N = 3
    2 def unpivot(frame):
    3     N, K = frame.shape
    4     data = {'value' : frame.values.ravel('F'),
    5             'variable' : np.asarray(frame.columns).repeat(N),
    6             'date' : np.tile(np.asarray(frame.index), K)}
    7     return DataFrame(data, columns=['date', 'variable', 'value'])
    8 df = unpivot(tm.makeTimeDataFrame())

    我们希望选出variable为A的记录

    To select out everything for variable A we could do:

    1 In [2]: df[df['variable'] == 'A']
    2 Out[2]: 
    3         date variable     value
    4 0 2000-01-03        A  0.469112
    5 1 2000-01-04        A -0.282863
    6 2 2000-01-05        A -1.509059

    (以上为非常简单的一个操作,现在我们可以尝试更复杂的操作)

    假设我们希望针对variables数据做一些时间序列操作,可以选用这样的表达方式:每一列为一个varibales数据,行的索引为日期,每一个index指示了一组观察数据.使用pivot_table()函数将以上df数据重新整理为符合要求的数据.如下:

    1 In [3]: df.pivot(index='date', columns='variable', values='value')
    2 Out[3]: 
    3 variable           A         B         C         D
    4 date                                              
    5 2000-01-03  0.469112 -1.135632  0.119209 -2.104569
    6 2000-01-04 -0.282863  1.212112 -1.044236 -0.494929
    7 2000-01-05 -1.509059 -0.173215 -0.861849  1.071804

    如果在调用pivot_table()时,省略了" values "参数, 而输入的DataFrame对象,除了 被用于index的,以及被用于columns的列以外,还有2个或者更多的列,结果就是一个具有层次列的DataFrame对象,这个对象的最上面的层次分别表示原DataFrame对象的不同的列.

    If the values argument is omitted, and the input DataFrame has more than one column of values which are not used as column or index inputs to pivot, then the resulting “pivoted” DataFrame will havehierarchical columns whose topmost level indicates the respective value column:

     1 In [4]: df['value2'] = df['value'] * 2
     2 
     3 In [5]: pivoted = df.pivot('date', 'variable')
     4 
     5 In [6]: pivoted
     6 Out[6]: 
     7                value                                  value2            
     8 variable           A         B         C         D         A         B   
     9 date                                                                     
    10 2000-01-03  0.469112 -1.135632  0.119209 -2.104569  0.938225 -2.271265   
    11 2000-01-04 -0.282863  1.212112 -1.044236 -0.494929 -0.565727  2.424224   
    12 2000-01-05 -1.509059 -0.173215 -0.861849  1.071804 -3.018117 -0.346429   
    13 
    14                                 
    15 variable           C         D  
    16 date                            
    17 2000-01-03  0.238417 -4.209138  
    18 2000-01-04 -2.088472 -0.989859  
    19 2000-01-05 -1.723698  2.143608  

    以上的DataFrame对象,可以选择特定的subset(子集)

    You of course can then select subsets from the pivoted DataFrame:

    1 In [7]: pivoted['value2']
    2 Out[7]: 
    3 variable           A         B         C         D
    4 date                                              
    5 2000-01-03  0.938225 -2.271265  0.238417 -4.209138
    6 2000-01-04 -0.565727  2.424224 -2.088472 -0.989859
    7 2000-01-05 -3.018117 -0.346429 -1.723698  2.143608

    注意,这个取子集的操作,返回的是一个在原DataFrame对象上的一个view(视图),具有相同的数据类型

    Note that this returns a view on the underlying data in the case where the data are homogeneously-typed.

  • 相关阅读:
    2020-08-25日报博客
    2020-08-24日报博客
    2020-08-23日报博客
    Pytorch-区分nn.BCELoss()、nn.BCEWithLogitsLoss()和nn.CrossEntropyLoss() 的用法
    Pytorch-基于BiLSTM+CRF实现中文分词
    Pytorch-手动实现Bert的训练过程(简写版)
    Pytorch-图像分类和CNN模型的迁移学习
    Pytorch trick集锦
    Pytorch-seq2seq机器翻译模型(不含attention和含attention两个版本)
    Pytorch-GAN
  • 原文地址:https://www.cnblogs.com/nomorewzx/p/4654060.html
Copyright © 2011-2022 走看看