Pandas 根据另一列提取数据

Pandas 根据另一列提取数据

在数据分析过程中,有时需要根据一列的值来筛选出另一列的值,Pandas中可以使用多种方法实现这一需求。本文将介绍两种基础的方法:使用.loc索引和使用[ ]操作符。

阅读更多:Pandas 教程

1. 使用.loc索引

使用.loc方法可以通过行和列的标签定位数据,语法如下:

df.loc[row_indexer, column_indexer]

其中,row_indexer称作row selector,用于定位行,column_indexer称作column selector,用于定位列。我们需要将row selector设置为布尔值索引,来筛选出符合条件的行,然后使用column selector选取需要的列。具体实现如下:

import pandas as pd

df = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Charlie'],
    'age': [25, 32, 18],
    'gender': ['female', 'male', 'male']
})

# 使用.loc方法筛选数据
df.loc[df['gender'] == 'male', 'name']

这里我们创建了一个包含name、age和gender三列的DataFrame,然后通过.loc方法选取了所有gender等于’male’的行,并选取了对应的name列。输出如下:

1         Bob
2    Charlie
Name: name, dtype: object

2. 使用[ ]操作符

除了使用.loc方法外,还可以直接使用[ ]操作符实现同样的功能。语法如下:

df[column_name][row_selector]

其中,column_name为需要选取的列名,row_selector为布尔值索引,用于筛选行。具体实现代码如下:

import pandas as pd

df = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Charlie'],
    'age': [25, 32, 18],
    'gender': ['female', 'male', 'male']
})

# 使用[ ]操作符筛选数据
df['name'][df['gender'] == 'male']

输出结果和上一种方法相同。

3. 示例

我们使用了如下数据集作为示例:

student_id name gender score
1001 Alice Female 89
1002 Bob Male 78
1003 Charlie Male 85
1004 David Male 90
1005 Emily Female 92
1006 Frank Male 87

以下是一些常见的筛选操作,可以根据具体的需求进行调整。

3.1 筛选特定列的数据

我们要选择所有学生的姓名和分数,可以使用.loc方法或[ ]操作符实现:

import pandas as pd

df = pd.read_csv('students.csv')

# 使用.loc方法选取特定列
df.loc[:, ['name', 'score']]

# 或者使用[ ]操作符选取特定列
df[['name', 'score']]

输出结果如下:

       name  score
0     Alice     89
1       Bob     78
2   Charlie     85
3     David     90
4     Emily     92
5     Frank     87

3.2 筛选符合特定条件的数据

我们要选择所有男生的数据,可以使用布尔值索引实现:

import pandas as pd

df = pd.read_csv('students.csv')

# 选择全部男生的数据
df[df['gender'] == 'Male']

输出结果如下:

   student_id     name gender  score
1        1002      Bob   Male     78
2        1003  Charlie   Male     85
3        1004    David   Male     90
5        1006    Frank   Male     87

3.3 筛选符合多个条件的数据

我们要选择所有女生且成绩大于90分的数据,可以进行如下操作:

import pandas as pd

df = pd.read_csv('students.csv')

# 选择所有女生且成绩大于90分的数据
df[(df['gender'] == 'Female') & (df['score'] > 90)]

输出结果如下:

   student_id   name  gender  score
4        1005  Emily  Female     92

3.4 根据条件将数据进行分组并计算平均值

我们要按照性别对学生的成绩进行分组并计算平均值,可以使用.groupby方法实现:

import pandas as pd

df = pd.read_csv('students.csv')

# 按照性别计算平均成绩
df.groupby('gender')['score'].mean()

输出结果如下:

gender
Female    90.5
Male      85.0
Name: score, dtype: float64

总结

本文介绍了Pandas中根据一列的值来筛选另一列的值的两种方法:使用.loc索引和使用[ ]操作符。同时,提供了一些具体的示例代码,希望能助您在数据分析过程中提高效率。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程