Pandas是Python中比较流行的数据分析库,它提供了不少的API来过滤数据。通过行或列的总和来过滤一个数据框架是我们使用Pandas时经常会遇到的操作之一。以下是这个过程的完整攻略:
- 准备数据
首先,我们需要准备我们所需的数据。以一个由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)
- 按行或按列求和
接下来,我们需要通过行或列求和,以便后面筛选数据。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
- 筛选数据
有了求和的结果,我们就可以利用它来筛选数据,以便得到我们想要的结果了。例如,我们可以筛选出销售额大于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 |
至此,我们已经完成了通过行或列的总和来过滤一个数据框架的操作。总的来说,这个过程包括了三个步骤:准备数据、按行或按列求和、筛选数据。