数据规整:聚合、合并和重塑 Pandas

数据规整:聚合、合并和重塑 《利用pandas进行数据分析-e2》

数据可能分散在许多文件或数据库中,存储的形式也不利于分析。

本章关注可以聚合、合并、重塑数据的方法。

  • 首先,我会介绍pandas的层次化索引,它广泛用于以上操作。
  • 然后,我深入介绍了 一些特殊的数据操作。merge , concat方法。
  • 最后,实战应用:在第14章,你可以看到这些工具的多种应用。

 

 

8.1 层次化索引

层次化索引在数据重塑和基于分组的操作(如透视表生成)中扮演着重要的角色。

data = pd.Series(np.random.randn(9), index=[list("aaabbccdd"),[1,2,3,1,3,1,2,2,3]])
#
a  1   -0.081004
   2    0.849981
   3   -0.140836
b  1    1.347778
   3   -0.187549
c  1    1.072571
   2   -1.201107
d  2   -0.605826
   3   -0.542657
dtype: float64

 

#可以这么用,先用level0的索引进行切片提取数据,然后用level1的索引提取数据
data.loc[:, 2]

 

#a    0.849981
#c   -1.201107
#d   -0.605826
#dtype: float64

 

 

data.unstack() 和stack(): 

一对方法,分别是分解level1索引到columns,和把columns变成level1的index.

 

横轴和纵轴都可以有多重索引:

数据规整:聚合、合并和重塑 Pandas_第1张图片数据规整:聚合、合并和重塑 Pandas_第2张图片
可以给行和列索引定义名字:  frame.columns.names = ['state', 'color']

 

 

 

⚠️DataFrame结构数据 , 这种索引   frame["xxx"] , 方括号内的是列名。Series结构是一维的,所以frame["xxx"]的xxx本质也是列名。

  

pd.MultiIndex.from_arrays()

单独设置多重索引,以便反复使用。用法见:https://www.cnblogs.com/chentianwei/p/12267929.html 

 

重排与分级排序:

  • swaplevel(i, j)  :重排列index, 把level的位置交换。
  • sort_index():  根据某个level进行排序

 

根据level进行汇总sum()统计:

frame.sum(level="key2")
frame.sum(level="color", axis=1)

 

⚠️其实是使用了groupby,先分组,然后再统计。

 

使用DataFrame的列进行索引: set_index(keys),就是用自己的列数据当"行"索引。

例子

frame = pd.DataFrame({'a': range(7), 'b': range(7,0,-1), 'c':['one']*3+['two']*4, 'd':[0,1,2,0,1,2,3]})

 

frame.set_index(["c", 'd'])

数据规整:聚合、合并和重塑 Pandas_第3张图片   set_index()后 数据规整:聚合、合并和重塑 Pandas_第4张图片还可以反向操作reset_index()数据规整:聚合、合并和重塑 Pandas_第5张图片


 

 

8.2 合并数据集

数据库风格的DataFrame合并

数据集的合并(merge)或连接(join)运算是通过一个或多个键将行连接起来的。 这些运算是关系型数据库(基于SQL)的核心。

pd.merge(left, right, how="inner", left_on=None, right_on=None, left_index=False, right_index=False)

之前的博客的例子:https://www.cnblogs.com/chentianwei/p/12302654.html

数据规整:聚合、合并和重塑 Pandas_第6张图片

 

 

 

索引上的合并

有时候,DataFrame中的连接键位于其索引中。

在这种情况下,可以传入 left_index=True或right_index=True(或两个都传)以说明索引应该被用作连接键: 

left1 = pd.DataFrame({'key': ['a', 'b', 'a', 'a', 'b','c'],'value': range(6)})
right1 = pd.DataFrame({'group_val': [3.5, 7]}, index=['a', 'b'])

pd.merge(left1, right1, left_on='key', right_index=True)

    key  value group_val
0    a    0    3.5
2    a    2    3.5
3    a    3    3.5
1    b    1    7.0
4    b    4    7.0

 

 

 

轴向连接:连接(concatenation)、绑定(binding)或堆叠 (stacking)。

 

合并重叠数据

 

8.3 重塑和轴向旋转

重塑层次化索引

将“长格式”旋转为“宽格式”

 

你可能感兴趣的:(数据规整:聚合、合并和重塑 Pandas)