按产品熊猫计算连续天数

时间:2020-06-24 17:26:42

标签: python pandas

我需要知道每种产品按行销售的天数。例如“在第1天,产品AX1在第1天售出了3件,而产品AX2在第1天售出了2件”

我有这个:

Product | Date       | Sales

AX1     |2019-01-01  | 3
AX1     |2019-01-02  | 2
AX2     |2019-01-01  | 2
AX2     |2019-01-02  | 1

但是我需要这个:

Product | Date       | Sales | Day

AX1     |2019-01-01  | 3     | 1
AX1     |2019-01-02  | 2     | 2
AX2     |2019-01-01  | 2     | 1
AX2     |2019-01-02  | 1     | 2

1 个答案:

答案 0 :(得分:3)

尝试:

import numpy as np

# if not done already:
df["Date"]=pd.to_datetime(df["Date"])
df=df.sort_values(["Product", "Date"])

df["Days"]=df.groupby("Product")["Date"].diff()

mask=df["Days"].isna()

df["Days"]=df["Days"].eq(pd.to_timedelta("1 days"))

df["Days"]=np.where(~df["Days"]&~mask, -df.groupby("Product")["Days"].cumsum(), df["Days"])

df["Days"]=df.groupby("Product")["Days"].cumsum().add(1).astype(int)

输出:

  Product       Date  Sales  Days
0     AX1 2019-01-01      3     1
1     AX1 2019-01-02      2     2
2     AX2 2019-01-01      2     1
3     AX2 2019-01-02      1     2