索引

1.行索引

#看一个一维数组的索引
s=pd.Series(np.random.randn(5),index=list('abcde'))
s
s.index#Series的索引
s.index.name='zrx'#给索引赋一个名字
#查询pandas里预置的索引的类
pd.*index?

2.重复索引

#重复索引
s=pd.Series(np.arange(6),index=list('abcabe'))
s
s['a']
out[10]:
a    0
a    3
dtype: int32s.index.is_unique#判断索引里面有无重复的
s.groupby(s.index).sum()#处理重复索引,把重复索引求和
s.groupby(s.index).mean()#处理重复索引,把重复索引求平均
s.groupby(s.index).first()#处理重复索引,把重复索引只取第一项

3.层次化索引

可以使数据在一个轴上有多个索引级别。即可以用二维的数据表达更高维度的数据,使数据组织方式更清晰。它使用 pd.MultiIndex 类来表示。
比如我们在分析股票数据,我们的一级行索引可以是日期;二级行索引可以是股票代码,列索引可以是股票的交易量,开盘价,收盘价等等。这样我们就可以把多个股票放在同一个时间维度下进行考察和分析。

#多级索引pd.MultiIndex
a = [['a', 'a', 'a', 'b', 'b', 'c', 'c'], [1, 2, 3, 1, 2, 2, 3]]
tuples = list(zip(*a))#把两个列表组装成一个,列表里的元素是元组
tuples
index=pd.MultiIndex.from_tuples(tuples,names=['level1','level2'])
index
s=pd.Series(np.random.randn(7),index=index)
s
#选取一级索引
s['b']s['b',2]

dataframe 多层索引

df = pd.DataFrame(np.random.randint(1, 10, (4, 3)), #选取1-10之间随机数,四行三列index=[['a', 'a', 'b', 'b'], [1, 2, 1, 2]], columns=[['one', 'one', 'two'], ['blue', 'red', 'blue']])
df
df.index.names = ['row-1', 'row-2']
df.columns.names = ['col-1', 'col-2']

交换索引

df2 = df.swaplevel('row-1', 'row-2')#交换索引
df2
df.sum(level=0)#根据第一级索引求和
df.sum(level=1)#根据第二级索引求和

索引列的转换

df = pd.DataFrame({'a': range(7),'b': range(7, 0, -1),'c': ['one', 'one', 'one', 'two', 'two', 'two', 'two'],'d': [0, 1, 2, 0, 1, 2, 3]})
df
df.set_index('c')#把c这一列当作索引值
df2 = df.set_index(['c', 'd'])#把c,d都设置为索引值
df2
df3 = df2.reset_index().sort_index('columns')#转换回来换成一个平面的dataframne
df3

分组计算

分组运算计算三步: 拆分->应用->合并

拆分:根据什么分组(按照键值(key)或者分组变量将数据分组。)

应用:每个分组进行什么样的运算(对于每组应用我们的函数,这一步非常灵活,可以是python自带函数,可以是我们自己编写的函数。

合并:把每个分组的运算合并起来(将函数计算后的结果聚合。)

核心:

1.不论分组键是数组、列表、字典、Series、函数,只要其与待分组变量的轴长度一致都可以传入groupby进行分组。

2.默认axis=0按行分组,可指定axis=1对列分组。

1. 对Series进行分组

import pandas as pd
import numpy as np
df = pd.DataFrame({'key1': ['a', 'a', 'b', 'b', 'a'],'key2': ['one', 'two', 'one', 'two', 'one'],'data1': np.random.randint(1, 10, 5),'data2': np.random.randint(1, 10, 5)})
df

grouped = df['data1'].groupby(df['key1'])#用key1进行分组
grouped

实际上,在这一步,我们并没有进行任何计算仅仅是创建用key1分组后创建了一个groupby对象,我们后面函数的任何操作都是基于这个对象的。

grouped = df['data1'].groupby(df['key1']).mean()#用key1分组计算data1平均值
grouped

语法很简单,但是这里需要注意grouped的数据类型,它不再是一个数据框,而是一个groupby对象

df['data1'].groupby([df['key1'], df['key2']]).mean() #创建有多层索引的

2. 对DataFrame进行分组

#对dtaframe进行分组
df.groupby('key1').mean()
means = df.groupby(['key1', 'key2']).mean()['data1']
means

通过unstack方法进行结果重塑:

means.unstack()#生成的就是一个dataframe

对分组进行迭代

GroupBy对象支持迭代操作,会产生一个由分组变量名和数据块组成的二元元组:

for name, group in df.groupby('key1'):#支持python迭代器协议#name分组的名字,group是是分组的数据print (name)print (group)

list(df.groupby(['key1','key2']))#转化成list

3.通过字典进行分组

#通过字典分组
df = pd.DataFrame(np.random.randint(1, 10, (5, 5)), columns=['a', 'b', 'c', 'd', 'e'], index=['zrx', 'dbw', 'lemon', 'mg', 'hzg'])df

df.loc[ 1:3] = np.NaN  #弄掉其中两行数据
df

想按列进行聚合

我们根据实际情况,对列名建立字典,然后将此字典传入groupby,切记指定axis=1,因为我们是对列进行分组聚合:

mapping = {'a': 'apple', 'b': 'banana', 'c': 'candy', 'd': 'apple', 'e': 'banana'}#对列名建立字典,列名进行分组
grouped = df.groupby(mapping, axis=1) #然后将此字典传入groupby
grouped.sum()

grouped.size() #每个有几列

4.通过函数进行分组

df = pd.DataFrame(np.random.randint(1, 10, (5, 5)), columns=['a', 'b', 'c', 'd', 'e'], index=['zrx', 'dbw', 'lemon', 'mg', 'hzg'])

def _dummy_group(idx):print (idx)return (idx)#返回索引的值
df.groupby(_dummy_group)#按行分组,所以每一行索引不一样

def _dummy_group(idx):print (idx)return (len(idx))
df.groupby(_dummy_group).size()#分组的name的长度

5.根据索引级别分组

刚刚我们的数据索引只有一级,当数据有多级索引时,可以通过level指定我们想要分组的索引,注意要使用axis=1表示按列:

#多级索引进行分组
columns = pd.MultiIndex.from_arrays([['rx', 'rx', 'rx', 'bw', 'bw'],['t-shirt', 'skirt', 'dress', 'shoes', 'underwear']], names=['name', 'type'])
df = pd.DataFrame(np.random.randint(1, 10, (5,5)), columns=columns)
df

我们名字进行分组求和:

df.groupby(level='name', axis=1).sum()

ps:转自CSDN博主:zrx1236

pandas分组计算平均值_pandas索引,分组计算相关推荐

  1. python使用pandas计算dataframe中每个分组的分位数极差、分组数据的分位数极差(range)、使用groupby函数和agg函数计算分组的两个分位数

    python使用pandas计算dataframe中每个分组的分位数极差.分组数据的分位数极差(range).使用groupby函数和agg函数计算分组的两个分位数 目录

  2. python使用pandas计算dataframe中每个分组的极差、分组数据的极差(range)、使用groupby函数和agg函数计算分组的最大值和最小值

    python使用pandas计算dataframe中每个分组的极差.分组数据的极差(range).使用groupby函数和agg函数计算分组的最大值和最小值 目录

  3. pandas使用groupby函数和describe函数计算不同分组的描述性统计(descriptive statistics of each group in dataframe)

    pandas使用groupby函数和describe函数计算不同分组的描述性统计(descriptive statistics of each group in dataframe) 目录

  4. pandas使用groupby函数和cumsum函数计算每个分组内的数值累加值、并生成新的dataframe数据列( cumulative sum of each group in dataframe

    pandas使用groupby函数和cumsum函数计算每个分组内的数值累加值.并生成新的dataframe数据列( cumulative sum of each group in dataframe ...

  5. pandas使用goupby函数和nunique函数计算每个分组对应的多个变量的独特值的个数( unique values of each group in dataframe)

    pandas使用goupby函数和nunique函数计算每个分组对应的多个变量的独特值的个数( unique values of each group in dataframe) 目录

  6. python筛选数据求均值_Python Pandas实现数据分组求平均值并填充nan的示例

    Python实现按某一列关键字分组,并计算各列的平均值,并用该值填充该分类该列的nan值. DataFrame数据格式 fillna方式实现 groupby方式实现 DataFrame数据格式 以下是 ...

  7. pandas使用groupby函数对dataframe进行分组统计、使用as_index参数设置分组聚合的结果中分组变量不是dataframe的索引(index)

    pandas使用groupby函数对dataframe进行分组统计.使用as_index参数设置分组聚合的结果中分组变量不是dataframe的索引(index) 目录

  8. pandas分层索引(层级索引、MultiIndex)的创建、取值、切片、统计计算以及普通索引和层级索引的转换方法

    pandas分层索引(层级索引.MultiIndex)的创建.取值.切片.统计计算以及普通索引和层级索引的转换方法 @TOC 多层索引的Series 层级索引的创建 层级索引(multi index) ...

  9. 使用numpy和pandas计算平均值、方差、标准差

    使用numpy和pandas计算平均值.方差.标准差 numpy和pandas都可以实现计算平均值.方差.标准差.但numpy默认的是总体方差,pandas默认的样本方差,即分母是n-1,是总体的无偏 ...

最新文章

  1. ICMP 隧道——将流量封装进 IMCP 的 ping 数据包中,旨在利用 ping 穿透防火墙的检测...
  2. Go语言简单的TCP编程
  3. SQL Server Management Studio清除历史登陆记录
  4. 虚拟机非正常关闭 无法打开
  5. 4、python简单线性回归代码案例(完整)_python 实现一个简单的线性回归案例
  6. android 实现 效果代码,Android实现雷达View效果的示例代码
  7. ~~试除法求所有约数(附模板题)
  8. 彗星撞地球-Warez组织的经典力作(15G动画压缩成64Kb的那个,2004年的第一名)
  9. Multisim卸载删除经历(已重新安装)
  10. clover 隐藏没用的启动项
  11. html 图片左中右排列,详解css布局实现左中右布局的5种方式
  12. google 一个天生的在线超速代理。(刷票首选)
  13. CiteSpace学习笔记(七)——网络信息的查看
  14. 概率统计_假设检验——单边检验的接受域和拒绝域
  15. 高效办公 1.2 用Python新建Excel文件
  16. mac os下 Ruby环境安装方法
  17. Go语言的流程结构简单介绍
  18. 【转】《与MySQL的零距离接触》第四章:操作数据表中的记录 (4-2:MySQL 插入记录INSERT)
  19. NYOJ268 荷兰国旗问题
  20. gif图片体积过大怎么办?手把手教你快速压缩gif动图

热门文章

  1. 飞秋局域网聊天是一种技术工作
  2. 在mount里看到哪个设备文件的一些笔记
  3. 如何设计通用的回调机制
  4. VC下设置Excel单元格的边框
  5. 三十五岁后,如何自学WEB前端编程
  6. 送书|science-组合图表绘制
  7. 衡量人体健康的“十大新标杆”
  8. 中blur函数_Comonad在图像处理中的应用
  9. P5726 【深基4.习9】打分(python3实现)
  10. 如何使用Markdown写博客