Python科学计算之Pandas索引与Groupby操作

索引操作

  • 一个简单的索引操作(之前博客里也写过,这次简单地复习一下)
import pandas as pd
#读取csv文件
df = pd.read_csv('./data/titanic.csv')
#定位两个列的名字,取前10个数
df[['Age','Fare']][:10]

在这里插入图片描述

  • iloc 用position来去定位
#遍历索引为0的整个一行数据
df.iloc[0]
#索引切片取0-4行的1,2列的数据
df.iloc[:5,1:3]

在这里插入图片描述
在这里插入图片描述

  • loc 用label来去定位
#定义名字"Name"的索引,并且通过"Name"值来打印数据
df.set_index('Name')
df.loc('Allen, Mr. William Henry')

#在'Name'值为Allen, Mr. William Henry的数据中,取出'Fare'单独的数据
df.loc['Allen, Mr. William Henry','Fare']
#输出
8.05

#'Name'值也可以作为切片
df.loc['Heikkinen, Miss. Laina':'Allen, Mr. William Henry',:]

#索引赋值操作
df.loc['Heikkinen, Miss. Laina','Fare'] = 1000
df.head()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 布尔索引
#布尔索引示例
df['Fare'] > 40
#布尔类型传入DataFrame中
df[df['Fare'] > 40][:5]

在这里插入图片描述
在这里插入图片描述

#对'Sex'为'male'的值取前5个
df[df['Sex'] == 'male'][:5]

#对'Sex'为'male'的Age求平均数
df.loc[df['Sex'] == 'male','Age'].mean()
#输出
30.72664459161148

#统计Age大于70的个数
(df[df['Age']>70]).sum()
#输出
5

在这里插入图片描述

Groupby操作

  • groupby函数类似于hadoop中hive sql语句中的groupby。主要是用于数据的分组及组内的运算。
  • 简单示例
import pandas as pd
#构建一个DataFrame
df = pd.DataFrame({'key':['A','B','C','A','B','C','A','B','C'],
       'data':[0,5,10,5,10,15,10,15,20]})
#求出A、B、C的总和
for key in ['A','B','C']:
    print (key,df[df['key'] == key].sum())

在这里插入图片描述
这样做是不是觉得很麻烦而且效果也很差?这是我们就可以用groupby函数,可以对他进行汇总求和。

df.groupby('key').sum()

在这里插入图片描述

  • groupby还可以指定numpy的操作
import numpy as np
#求出平均值
df.groupby('key').aggregate(np.mean)

在这里插入图片描述

  • 继续对之前csv数据进行操作
#根据Sex分组,分别求出male与female年龄的总数(Age为空则不会被记录进去)
df.groupby('Sex')['Age'].count()
#输出
Sex
female    261
male      453
Name: Age, dtype: int64

#根据Sex分组,分别求出male与female年龄的平均值
df.groupby('Sex')['Age'].mean()
#输出
Sex
female    27.915709
male      30.726645
Name: Age, dtype: float64

#根据Sex分组,算出Survived概率
df.groupby('Sex')['Survived'].mean()
#输出
Sex
female    0.742038
male      0.188908
Name: Survived, dtype: float64
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值