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.

时间: 2024-08-01 23:13:50

pandas中DataFrame类的pivot_table函数------Reshaping by pivoting DataFrame objects的相关文章

《寒江独钓_Windows内核安全编程》中修改类驱动分发函数

最近在阅读<寒江独钓_Windows内核安全编程>一书的过程中,发现修改类驱动分发函数这一技术点,书中只给出了具体思路和部分代码,没有完整的例子. 按照作者的思路和代码,将例子补充完整,发现将驱动安装在WIN7 32位环境下,键盘失效. 经调试发现,可能的原因是替换了\\Driver\\Kbdclass类驱动的所有分发函数导致,如果只替换分发IRP_MJ_READ的函数,不会有问题,以下为代码 1 //替换分发函数 来实现过滤 2 #include <wdm.h> 3 #inclu

C#控制台 assembly与getmethod获取一个dll中的类的公有函数名

1 dll中有两个类 class1 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace ClassLibrary1 8 { 9 public class Student 10 { 11 private int _ageStudent; 12 private string

ros中NodeHandle类的subscribe()函数使用报错问题

在使用ros写订阅者时,代码如下: #include "ros/ros.h" #include "std_msgs/String.h" #include <boost/thread.hpp> #include <sensor_msgs/PointCloud2.h> #include <nav_msgs/Odometry.h> #include <typeinfo> class multiThreadListener {

java中Math类的常用函数

特别的,有一个新的属性,它能让我们控制多个元素的属性,就是:scoped.style标记上新出现的这个scoped属性可以让CSS样式只对局部元素生效,具体说,就是存放这段style样式的元素的子元素生效,跟平常的样式不一样的唯一地方就是新加了一个scoped属性: 复制代码 代码如下: <style scoped>/* styles go here */</style> 具有scoped属性的样式只会应用到当前元素和其子元素.Inline样式仍然比scoped样式优先级高,所以,

pandas.DataFrame学习系列2——函数方法(1)

DataFrame类具有很多方法,下面做用法的介绍和举例. pandas.DataFrame学习系列2--函数方法(1) 1.abs(),返回DataFrame每个数值的绝对值,前提是所有元素均为数值型 1 import pandas as pd 2 import numpy as np 3 4 df=pd.read_excel('南京银行.xlsx',index_col='Date') 5 df1=df[:5] 6 df1.iat[0,1]=-df1.iat[0,1] 7 df1 8 Open

pandas中DataFrame

python数据分析工具pandas中DataFrame和Series作为主要的数据结构. 本文主要是介绍如何对DataFrame数据进行操作并结合一个实例测试操作函数. 1)查看DataFrame数据及属性 df_obj = DataFrame() #创建DataFrame对象 df_obj.dtypes #查看各行的数据格式 df_obj['列名'].astype(int)#转换某列的数据类型 df_obj.head() #查看前几行的数据,默认前5行 df_obj.tail() #查看后几

绘图与可视化--pandas中的绘图函数

matplotlib是一种比较低级的工具,要组装一张图表,你得用它得各种基础组件才行:数据展示(即图表类型:线型图.柱状图.盒型图.散布图.等值线图等).图例.标题.刻度标签以及其它注释型信息. 在pandas中,有行标签.列标签及分组信息,要绘制一张图,需要很多matplotlib代码.pandas有很多能够利用DataFrame对象数据组织特点来创建标准图表的高级绘图方法. 1.1 线型图 Series和DataFrame都有一个用于生成各类图表的plot方法,默认情况下,生成的是线型图.

回调函数中调用类中的非静态成员变量或非静态成员函数

有关这方面的问题,首先说一点: 回调函数必须是静态成员函数或者全局函数来实现回调函数,大概原因是普通的C++成员函数都隐含了一个函数参数,即this指针,C++通过传递this指针给成员函数从而实现函数可以访问类的特定对象的数据成员.由于this指针的原因,使得一个普通成员函数作为回调函数时就会因为隐含的this指针问题使得函数参数个数不匹配,从而导致回调函数编译失败. 基于上面的理论,如何在类中封装回调函数呢? 回调函数只能是全局函数或者静态成员函数,但是由于全局函数会破坏封装性,所以只能用静

【转载】 C++多继承中重写不同基类中相同原型的虚函数

本篇随笔为转载,原文地址:C++多继承中重写不同基类中相同原型的虚函数. 在C++多继承体系当中,在派生类中可以重写不同基类中的虚函数.下面就是一个例子: class CBaseA { public: virtual void TestA(); }; class CBaseB { public: virtual void TestB(); }; class CDerived : public CBaseA, public CBaseB { public: virtual void TestA()