Pandas通过行或列的总和来过滤一个数据框架

  • Post category:Python

Pandas是Python中比较流行的数据分析库,它提供了不少的API来过滤数据。通过行或列的总和来过滤一个数据框架是我们使用Pandas时经常会遇到的操作之一。以下是这个过程的完整攻略:

  1. 准备数据

首先,我们需要准备我们所需的数据。以一个由5个城市的销售记录数据框为例:

City Sale Month
LA 245.5 Apr
NYC 63.5 Feb
LA 231.2 May
CHI 132.4 Jan
NYC 564.2 Mar
CHI 198.4 Apr
LA 278.0 Feb

我们可以通过Pandas中DataFrame对象创建一个数据框

import pandas as pd

data = [{'City': 'LA', 'Sale': 245.5, 'Month': 'Apr'},
        {'City': 'NYC', 'Sale': 63.5, 'Month': 'Feb'},
        {'City': 'LA', 'Sale': 231.2, 'Month': 'May'},
        {'City': 'CHI', 'Sale': 132.4, 'Month': 'Jan'},
        {'City': 'NYC', 'Sale': 564.2, 'Month': 'Mar'},
        {'City': 'CHI', 'Sale': 198.4, 'Month': 'Apr'},
        {'City': 'LA', 'Sale': 278.0, 'Month': 'Feb'}]

df = pd.DataFrame(data)
  1. 按行或按列求和

接下来,我们需要通过行或列求和,以便后面筛选数据。Pandas中的sum()函数可以完成这个操作。例如,我们可以通过“按城市求和”的方式获得各城市销售额的总和,如下所示:

sum_by_city = df.groupby('City')['Sale'].sum()

这个操作将返回如下的结果:

City
CHI    330.8
LA     754.7
NYC    627.7
Name: Sale, dtype: float64

同样,我们也可以通过“按月份求和”的方式获得每个月销售额的总和,如下所示:

sum_by_month = df.groupby('Month')['Sale'].sum()

这个操作将返回如下的结果:

Month
Apr    443.9
Feb    341.5
Jan    132.4
Mar    564.2
May    231.2
Name: Sale, dtype: float64
  1. 筛选数据

有了求和的结果,我们就可以利用它来筛选数据,以便得到我们想要的结果了。例如,我们可以筛选出销售额大于500的城市数据:

df[df.groupby('City')['Sale'].transform('sum') > 500]

这个操作将返回如下的结果:

City Sale Month
LA 245.5 Apr
LA 231.2 May
LA 278.0 Feb
NYC 63.5 Feb
NYC 564.2 Mar

我们同样也可以筛选出销售额超过200的月份的数据:

df[df.groupby('Month')['Sale'].transform('sum') > 200]

这个操作将返回如下的结果:

City Sale Month
LA 245.5 Apr
LA 231.2 May
NYC 564.2 Mar
CHI 198.4 Apr
LA 278.0 Feb

至此,我们已经完成了通过行或列的总和来过滤一个数据框架的操作。总的来说,这个过程包括了三个步骤:准备数据、按行或按列求和、筛选数据。