首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何为给定范围在Python中添加特定天数的值?

如何为给定范围在Python中添加特定天数的值?
EN

Stack Overflow用户
提问于 2018-05-31 09:59:58
回答 1查看 188关注 0票数 3

我有一个数据集(Product_ID,date_time,dates ),它的产品在不同的日期销售。日期是9个月,随机13天或更长时间从一个月。我必须对数据进行分类,使每种产品每天售出1-3天,每天销售4-7天,每天销售8-15天,每天销售超过16天。那么,我如何使用熊猫和其他软件包在python中编写这个代码呢?

代码语言:javascript
运行
复制
PRODUCT_ID      DATE_LOCATION  Sold
0E4234          01-08-16 0:00    2
0E4234          02-08-16 0:00    7
0E4234          07-08-16 0:00    3
0E4234          08-08-16 0:00    1
0E4234          09-08-16 0:00    2
0E4234          10-08-16 0.00    1
.
. 
.
0G2342          22-08-16 0:00    1
0G2342          23-08-16 0:00    2
0G2342          26-08-16 0:00    1
0G2342          28-08-16 0:00    1
0G2342          29-08-16 0:00    3
0G2342          30-08-16 0:00    3
.
.
.(goes for 64 products each with 9 months of data)
.

我甚至不知道如何在python中编写代码,所需的输出是

代码语言:javascript
运行
复制
PRODUCT_ID      Days   Sold
0E4234          1-3      9 #(1,2) dates because range is 1 to 3
                4-7      7 #(7,8,9,10) dates because range is 4 to 7
                8-15     0
                 >16     0
0G2342          1-3      11 #(22,23),(26),(28,29,30) dates because range is 1 to 3
                4-7      0
                8-15     0
                 >16     0
.
.(for 64 products)
.

如果至少有人发了一个链接到哪里,我会很高兴的。我试过了

代码语言:javascript
运行
复制
df["DATE_LOCATION"] = pd.to_datetime(df.DATE_LOCATION)
df["DAY"] = df.DATE_LOCATION.dt.day
def flag(x):
    if 1<=x<=3:
        return '1-3'
    elif 4<=x<=7:
        return '4-7'
    elif 8<=x<=15:
        return '8-15'
    else:
        return '>=16'
df["Days"] = df.DAY.apply(flag)
df.groupby(["PRODUCT_ID","Days"]).Sold.sum()

这给了我在这几天内销售的产品数量,在每个month.But中,我需要在指定范围内的产品之和,如果产品是按指定的顺序销售的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-01 10:50:07

transform用于与原始DataFrame相同大小的Series,使用cut和聚合sum进行绑定

代码语言:javascript
运行
复制
df['DATE_LOCATION'] = pd.to_datetime(df['DATE_LOCATION'], format='%d-%m-%y %H:%M')

df = df.sort_values("DATE_LOCATION")
s = (df["DATE_LOCATION"].diff().dt.days > 1).cumsum()

count = s.groupby(s).transform('size')
print (count)
0     2
1     2
2     4
3     4
4     4
5     4
6     2
7     2
8     1
9     3
10    3
11    3
Name: DATE_LOCATION, dtype: int32

bins = pd.cut(count, bins=[0,3,7,15,31], labels=['1-3', '4-7','8-15', '>=16'])
df = df.groupby(['PRODUCT_ID', bins])['Sold'].sum().reset_index()
print (df)
  PRODUCT_ID DATE_LOCATION  Sold
0     0E4234           1-3     9
1     0E4234           4-7     7
2     0G2342           1-3    11
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50621605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档