首页 > 其他分享 >DataFrame:刷选与聚合

DataFrame:刷选与聚合

时间:2022-09-04 14:46:30浏览次数:67  
标签:Q1 聚合 Q4 df DataFrame 刷选 False True name

0. 准备

import pandas as pd
# 准备数据
df = pd.read_excel('https://www.gairuo.com/file/data/dataset/team.xlsx').head()
df
name team Q1 Q2 Q3 Q4
0 Liver E 89 21 24 64
1 Arry C 36 37 37 57
2 Ack A 57 60 18 84
3 Eorge C 93 96 71 78
4 Oah D 65 49 61 86

1. 逻辑运算

# 1.单列逻辑,返回对应位置是否满足逻辑表达式
df['Q1'] > 30 
0    True
1    True
2    True
3    True
4    True
Name: Q1, dtype: bool
# 索引参与逻辑运算
df.index <= 5
array([ True,  True,  True,  True,  True])
# 2.多列逻辑,返回对应数据块中每个元素是否满足逻辑表达式
df.loc[:, 'Q1':'Q4'] > 60
Q1 Q2 Q3 Q4
0 True False False True
1 False False False False
2 False False False True
3 True True True True
4 True False True True
# 3.多条件组合
(df['Q1'] > 60) & (df['Q2'] > 60) & (df['Q3'] > 60) & (df['Q4'] > 60)
0    False
1    False
2    False
3     True
4    False
dtype: bool
# 上述结果利布尔序列拥有的all()方法实现,any()是只要有一个True则结果为True
(df.loc[:, 'Q1':'Q4'] > 60).all(axis=1)
0    False
1    False
2    False
3     True
4    False
dtype: bool
# 或(|)、与(&)、非(~)运算
~((df.loc[:, 'Q1':'Q4'] > 60).all(axis=1))
0     True
1     True
2     True
3    False
4     True
dtype: bool
### 逻辑运算中常用的几个字符串方法
# 1.name列是否包含A:.str.contains()
df['name'].str.contains('A')
0    False
1     True
2     True
3    False
4    False
Name: name, dtype: bool
# 2.name列是否出现在列表['Arry','Ack']中
df['name'].isin(['Arry','Ack'])
0    False
1     True
2     True
3    False
4    False
Name: name, dtype: bool

2. 基于上述逻辑筛选数据

# 1.df[]、df.loc[]、df.iloc[]的方括号内均支持上述逻辑表达式
df[df['name'].str.contains('ge')]  
name team Q1 Q2 Q3 Q4
3 Eorge C 93 96 71 78
# 2.[]内的逻辑表达式输出结果可以是"一个布尔序列"或者"符合格式要求的数据形式"
df[(df.loc[:, 'Q1':'Q4'] > 60).all(axis=1)]
name team Q1 Q2 Q3 Q4
3 Eorge C 93 96 71 78
# 第2行
df.iloc[1+1]
name    Ack
team      A
Q1       57
Q2       60
Q3       18
Q4       84
Name: 2, dtype: object
df.iloc[1+1:3]
name team Q1 Q2 Q3 Q4
2 Ack A 57 60 18 84
# 3.[]内的逻辑表达式输出结果也可以是"数据块"
df[df.loc[:, 'Q1':'Q4'] > 60]
name team Q1 Q2 Q3 Q4
0 NaN NaN 89.0 NaN NaN 64.0
1 NaN NaN NaN NaN NaN NaN
2 NaN NaN NaN NaN NaN 84.0
3 NaN NaN 93.0 96.0 71.0 78.0
4 NaN NaN 65.0 NaN 61.0 86.0

3. 函数筛选

### 1. 使用lambda函数
# 查询最大索引值对应的那一行,只显示'Q1'至'Q4'列
df.loc[lambda x: x.index == max(df.index), 'Q1':'Q4']
Q1 Q2 Q3 Q4
4 65 49 61 86
# 列筛选:列名中包含Q的列
df.loc[:, lambda x: x.columns.str.contains('Q')]
Q1 Q2 Q3 Q4
0 89 21 24 64
1 36 37 37 57
2 57 60 18 84
3 93 96 71 78
4 65 49 61 86

5. 数据查询 df.query()

# df.query()内传入的是字符串形式的逻辑表达式,类似SQL中where从句,因而不支持 df.query('df.name.str.contains('A')')
df.query('name!="Eorge" and Q1>60') 
name team Q1 Q2 Q3 Q4
0 Liver E 89 21 24 64
4 Oah D 65 49 61 86
# 还支持使用@符号引入变量
a = df.Q1.mean()
df.query('Q1>@a') # @千万不可省略
name team Q1 Q2 Q3 Q4
0 Liver E 89 21 24 64
3 Eorge C 93 96 71 78
# df.eval() 输出字符串内逻辑表达式的结果
df.eval('Q1>Q2')
0     True
1    False
2    False
3    False
4     True
dtype: bool

6. 筛选df.filter(),支持正则表达式、模糊匹配

# 传入行名、列名
df.filter(items=['name','Q4'])
name Q4
0 Liver 64
1 Arry 57
2 Ack 84
3 Eorge 78
4 Oah 86
# 正则表达式
df.filter(regex='Q', axis=1) #列名包含Q的列,axis=1传入的列名,regex='Q$'以Q结尾,regex='^Q'以Q开头
Q1 Q2 Q3 Q4
0 89 21 24 64
1 36 37 37 57
2 57 60 18 84
3 93 96 71 78
4 65 49 61 86
df.filter(regex='2', axis=0) #索引中含2的行,axis=0传入的索引
name team Q1 Q2 Q3 Q4
2 Ack A 57 60 18 84
# name中包含ge的行
df.set_index('name').filter(regex='ge', axis=0)  #.reset_index() 推荐2中的方法
team Q1 Q2 Q3 Q4
name
Eorge C 93 96 71 78

7. 按数据类型筛选

df.dtypes
name    object
team    object
Q1       int64
Q2       int64
Q3       int64
Q4       int64
dtype: object
# 只取数值型
df.select_dtypes(include='int64')
Q1 Q2 Q3 Q4
0 89 21 24 64
1 36 37 37 57
2 57 60 18 84
3 93 96 71 78
4 65 49 61 86
# 排除数值型
df.select_dtypes(exclude='int64')
name team
0 Liver E
1 Arry C
2 Ack A
3 Eorge C
4 Oah D

标签:Q1,聚合,Q4,df,DataFrame,刷选,False,True,name
From: https://www.cnblogs.com/unique2cxy/p/16655075.html

相关文章

  • MVN4️⃣聚合 & 继承
    聚合用于快速构建项目,继承用于快速配置相同点:打包方式为pom,可以将两种关系制作到同一个pom文件中。属于设计型模块,无实际的模块内容。不同点:聚合:在当前模块中......
  • Maven聚合工程
    Maven聚合工程1Maven聚合工程概念Maven聚合工程:就是可以在一个Maven父工程中创建多个组件(项目),这个多个组件之间可以相互依赖,实现组件的复用2创建Maven聚合工程2......
  • ElasticSearch 分组聚合统计
    统计总数:GETmytest-statistics/_search{"size":0,"query":{"bool":{"must":[{"range":{"day":{......
  • oracle 分组 聚合数据 单字段聚合问题
    SELECT--max加这个只是为了让字段不在分组里写 max(id)id, max(stockorg_name)stockorg_name, max(vbillcode)vbillcode, max(source_no)source_no,--newvbil......
  • sqlserver 分组 聚合数据
    SELECT--OrderNo数据分组条件OrderNo,LEFT(MAX(InDate),10)ASInDate,--MAX只是不想让它参与分组条件MAX(WarehouseCode)WarehouseCode,MAX(Warehous......
  • Python之DataFrame基础知识点
    https://blog.csdn.net/u012856866/article/details/118936961?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166210446116782391824184%2522%252C%2522scm%2......
  • 设置VF聚合网口
    查看PCI网卡#lspci|grepEth19:00.0Ethernetcontroller:IntelCorporationEthernetControllerX710for10GbESFP+(rev02)19:00.1Ethernetcontroller:Int......
  • Dataset与DataFrame创建的比较方式
    DataFrameDataset创建方式1.根据集合或者RDD的隐式函数toDF(列名)创建(需要引入SparkSession的隐式转换函数)2.SparkSession的createDataFrame函数3.外部结构化......
  • VTP | DTP | 端口镜像 | 端口聚合 | 端口隔离
    1、VTP(vlan数据库同步协议):凡是同个网络中开启了VTP协议的网络设备,客户端上的vlan全部来自与服务端的vlan。就是全网vlan数据库同步,不用自己一个一个的去配置。①VTP具有......
  • DataFrame中的行动算子操作2
    ##修改hdfs-site.xml<property><name>hive.metastore.warehouse.dir</name><value>hdfs://node1:9000/user/hive/warehouse</value><description>locationof......