我有这样的数据框架:
Name Date Quantity
Apple 07/11/17 20
orange 07/14/17 20
Apple 07/14/17 70
Orange 07/25/17 40
Apple 07/20/17 30
我想通过Name
和Date
将其聚合,以获得数量之和详细信息:
日期:组,结果应在本周初(或仅在星期一)
数量:合计,如果两个或多个记录具有相同的名称和日期(如果福尔斯在相同的间隔内)
所需输出如下所示:
Name Date Quantity
Apple 07/10/17 90
orange 07/10/17 20
Apple 07/17/17 30
orange 07/24/17 40
6条答案
按热度按时间dsf9zpds1#
首先,转换列
date
to_datetime
并减去一周,因为我们需要该日期前一周的总和,而不是该日期前一周的总和。然后通过W-MON使用
groupby
和Grouper
,并聚合sum
:92dk7w1h2#
让我们将
groupby
、resample
与W-Mon
和sum
一起使用:输出:
dddzy1tm3#
首先将列date转换为_datetime。这将从Mondays开始按周分组。它将输出周数(但您可以在中查找更改
http://strftime.org/
输出:
yqhsw0fo4#
这将对上一个星期一的每一行进行分组(如果日期已经是星期一,则不做任何更改)。这具有按周分组的效果:
范例:
whlutmcx5#
你已经收到了很多好答案,这个问题也很老了,但是,考虑到一些解决方案使用了过时的函数,我遇到了同样的问题,找到了一个不同的解决方案,我认为这对分享它的人可能会有帮助。
根据您提议的 Dataframe :
我们必须将'Date'中的值转换为Pandas' Datetime,因为它们现在是字符串。
然后我们可以使用Series的 dt 属性,该属性允许我们处理 * DateTime类 * 序列并提取信息。
通过DateTime格式,我们可以使用dt参数来提取与日期相关的周数。为了不丢失任何信息,我倾向于添加一个包含周数的新列。一旦检索到周数,我们就可以按该周分组。
小问题:如果我们考虑不同的年份呢
可能会有这样的情况,我们的数据有一个年份范围,在这种情况下,我们不能只考虑星期(否则我们会把一年的数据和另一年的数据混淆),所以从isocalendar()中提取年份列也是有用的。
uqdfh47h6#
可以使用
to_period
方法将日期截断为一周的第一天(如果使用周期M
,则为一个月):