Pandas 按周分组
在本文中,我们将介绍如何使用Pandas在Python中对数据进行按周分组。
阅读更多:Pandas 教程
背景知识
Pandas是一个用于数据分析的Python库。其中,DataFrame是Pandas的一种数据类型,它类似于电子表格或数据库表格。Pandas中的groupby()函数可以将数据按照某个列或多个列的值进行分组,使我们能够轻松地计算分组统计量。
对于时间序列数据,我们可以使用datetime库将日期时间转换为Python的datetime对象。接下来,我们可以在DataFrame中使用这些datetime对象来进行按日期分组,包括按周、按月等。
按周分组
在Pandas中,可以使用resample()函数将数据重新采样到具有不同时间间隔(例如按周、按月)的新日期范围内。
例如,假设我们有以下一个DataFrame:
import pandas as pd
df = pd.DataFrame({
'date': ['2020-01-01', '2020-01-02', '2020-01-05', '2020-01-06', '2020-01-08'],
'value': [1, 2, 3, 4, 5]
})
df['date'] = pd.to_datetime(df['date'])
df = df.set_index('date')
这个DataFrame包含了一些日期和对应的值。
我们可以将它按周分组,并计算每周的总和。这可以通过以下代码实现:
df.resample('W').sum()
其中,’W’表示按周分组。
我们也可以以每周的第一天或最后一天来分组:
df.resample('W-MON').sum() # 按周一为第一天
df.resample('W-SUN').sum() # 按周日为第一天
示例应用
下面,我们将使用一个真实的数据集来演示按周分组。
加载数据
我们将使用Uber的纽约市出租车数据集。这个数据集包含了2014年纽约市的出租车行程数据,每条行程包括了出发时间、出发地点、到达时间和到达地点等信息。我们将使用这个数据集来演示如何按周分组。
import pandas as pd
df = pd.read_csv('uber_data.csv')
df['Date/Time'] = pd.to_datetime(df['Date/Time'])
此替我们使用Pandas的read_csv()函数加载数据集(将CSV文件转换为DataFrame)。我们还将’日期/时间’列转换为datetime对象。
按周分组
现在我们可以按周分组,统计每周的行程总量。
trips_by_week = df.resample('W', on='Date/Time')['Date/Time'].count().reset_index()
trips_by_week['Week'] = trips_by_week['Date/Time'].apply(lambda x: x.strftime('%Y-%m-%d'))
trips_by_week.head()
我们首先使用resample()函数将行程数据按周分组,并计算每周的行程总量。然后,我们将Date/Time列(即每周的第一天)转换为字符串格式,并将其命名为“Week”。
这是前几行输出:
日期/时间 | 计数 | 周 |
---|---|---|
2014-01-05 | 1955 | 2014-01-05 |
2014-01-12 | 2144 | 2014-01-12 |
2014-01-19 | 2320 | 2014-01-19 |
2014-01-26 | 2576 | 2014-01-26 |
2014-02-02 | 2460 | 2014-02-02 |
可视化
最后,我们可以使用Matplotlib和Seaborn等库将结果可视化,以便更好地理解数据。下面是按周行程总数的折线图。
import matplotlib.pyplot asimport seaborn as sns
sns.set(style="darkgrid")
plt.figure(figsize=(12, 6))
plt.title('Trips by Week', fontsize=20)
sns.lineplot(x='Week', y='Date/Time', data=trips_by_week, color='b')
plt.xticks(rotation=45, fontsize=12)
plt.xlabel('Week', fontsize=18)
plt.ylabel('Number of Trips', fontsize=18)
plt.show()
可以看出,2014年夏季(6月至8月)的行程总数比其他时间段高。我们也可以使用同样的技术来计算每月、每天的行程总数等等。
总结
按周分组是Pandas中一种很有用的技术,它使我们能够轻松地计算和可视化时间序列数据。在本文中,我们介绍了如何使用Pandas的resample()函数来按周分组,并使用Uber出租车数据集来演示了示例应用。希望这篇文章可以帮助您学习Pandas中的按周分组技术。