#####chapter 4 分组/聚合是我最喜欢的关于pandas的东西,我一直在用它。你应该读读这个
好吧!我们回到我们的自行车路径数据集。我住在蒙特利尔,我很好奇,我们是不是更像是一个通勤城市,还是一个有趣的城市——人们在周末或工作日更喜欢骑车吗?
在dataframe中添加一个“工作日”列。
首先,我们需要加载数据。我们这样做过
bikes = pd.read_csv('../data/bikes.csv', sep=';', encoding='latin1', parse_dates=['Date'], dayfirst=True, index_col='Date')
bikes['Berri 1'].plot()
接下来,我们来看看Berri自行车道。Berri是蒙特利尔的一条街,有一条很重要的自行车道。我现在主要是在去图书馆的路上用它,但有时我在老蒙特利尔工作时也会用它。
所以我们要创建一个dataframe只有Berri 自行车道。
berri_bikes = bikes[['Berri 1']]
berri_bikes[:5]
接下来,我们需要添加一个“工作日”列。首先,我们可以从索引中得到工作日。我们还没有讨论索引,但是索引是在“Date”下面的dataframe上的左边。基本上就是一年中的所有日子
berri_bikes.index
你可以看到实际上有些日子不见了——实际上一年只有310天。谁知道这是为什么。
pandas有很多非常棒的时间序列功能,所以如果我们想让每一行都有一个自然月的时间表现,我们可以这样做
berri_bikes.index.day
不过,我们实际上想要的是工作日
berri_bikes.index.weekday
按照一周7天的方式表现,0是星期天。
现在我们知道了如何得到工作日,我们可以将它添加到dataframe中的一个列中:
berri_bikes['weekday'] = berri_bikes.index.weekday
berri_bikes[:5]
运行语句得了个警告:
(这个警告没怎么搞懂,我用.loc的方式也一样出现。)
在平日里把骑自行车的人加起来
结果真的很简单!
Dataframs有一个类似于SQL groupby的.groupby()方法,如果您熟悉它的话。我现在不打算解释更多,如果你想知道更多,看详细文档更好。
在本例中,berri_bikes.groupby(‘weekday’).aggregate(sum)表示“在工作日将行分组&#