在python中寻找连日

2024-04-20 08:26:14 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有一组50个日期,我在这里指定了7个

df["CreatedDate"] = pd.DataFrame('09-08-16 0:00','22-08-16 0:00','23-08-16 0:00',28-08-16 0:00,'29-08-16 0:00','30-08-16 0:00','31-08-16 0:00')
df["CreatedDate"] = pd.to_datetime(df4.CreatedDate)
df4["DAY"] = df4.CreatedDate.dt.day

如何找到连续天数[1-3]、[4-7]、[8-15]、[gt;=16]

^{pr2}$

假设产品(pen)已经上市2年了,我们从今天开始收集过去10个月的数据,我想发现的是,如果有人连续购买1、2或3天的笔,如果是,则记下[1-3],如果他们连续购买4、5、6或7天,我们将计数放入[4-7]对于其他范围,以此类推

我不知道要指定哪个条件与条件匹配


Tags: togtdataframedfdatetime产品dt条件
2条回答

我认为需要:

df4 = pd.DataFrame({'CreatedDate':['09-08-16 0:00','22-08-16 0:00','23-08-16 0:00','28-08-16 0:00','29-08-16 0:00','30-08-16 0:00','31-08-16 0:00']})
df4["CreatedDate"] = pd.to_datetime(df4.CreatedDate)

^{pr2}$

这里有一个尝试,binning和@jezrael是一样的(除了最后一个bin,我不确定它应该被限制在31。。。有没有一种方法可以用pd.cut来表示开区间在

import pandas as pd

df = pd.DataFrame({ "CreatedDate": ['09-08-16 0:00','22-08-16 0:00','23-08-16 0:00','28-08-16 0:00','29-08-16 0:00','30-08-16 0:00','31-08-16 0:00']})
df["CreatedDate"] = pd.to_datetime(df.CreatedDate)

# sort by date
df = df.sort_values("CreatedDate")

# group consecutive dates
oneday = pd.Timedelta("1 day")
df["groups"] = (df.diff() > oneday).cumsum()
counts = df.groupby("groups").count()["CreatedDate"]

# bin
streaks = (pd.cut(counts, bins=[0,3,7,15,1000000], labels=['1-3', '4-7','8-15', '>=16'])
           .value_counts()
           .rename_axis("streak")
           .reset_index(name="count"))

print(streaks)

  streak  count
0    1-3      2
1    4-7      1
2   >=16      0
3   8-15      0

相关问题 更多 >