【问题标题】:Identify if customer from previous month has sales in this month using pandas使用 pandas 确定上个月的客户本月是否有销售
【发布时间】:2021-01-20 02:45:49
【问题描述】:

我有一个数据集,其中包括期间、客户和销售量。我要确定的是,对于在第 1 期少于当前期间被出售给的客户,该客户是否在此期间被出售(例如,客户在最近一个时期内是否一起停止购买):

我的数据集如下所示:

    PERIOD  CUSTOMER    AMOUNTSOLD
0   2020-08 C1  1000
1   2020-08 C2  1000
2   2020-08 C3  1000
3   2020-09 C1  1000
4   2020-09 C2  1000

我曾考虑根据时间段将数据集拆分为不同的数据帧,然后检查客户是否存在于相应的时间段数据帧中,但我认为这不是一种特别有效的方法。

根据 Manakins 的评论,我的预期输出是:

CUSTOMER    EXISTS IN PREVIOUS PERIOD AND CURRENT PERIOD
C1  Y
C2  Y
C3  N

非常感谢您的帮助,

谢谢

【问题讨论】:

  • 你能添加你的预期输出吗?
  • 感谢您的反馈,包括预期的输出使我更清楚。我已将预期输出作为对原始问题的编辑。欢迎任何反馈,谢谢
  • 你可以试试df['PERIOD'] = pd.to_datetime(df['PERIOD']);df['timedelta'] = df.groupby(['CUSTOMER'])['PERIOD'].diff()

标签: python pandas dataframe time-series


【解决方案1】:

这里我们需要使用一些滚动/窗口函数。

首先,我们需要确保日期时间是正确的日期时间。然后我们可以测量 datediff(假设您的 df 已排序)并创建一个布尔值来检查前几个月的客户。

df['PERIOD']  = pd.to_datetime(df['PERIOD'])
df['timedelta'] = df.groupby(['CUSTOMER'])['PERIOD'].diff() 

df['Exists']= np.where(df.groupby('CUSTOMER')['CUSTOMER'].transform('size') > 1, 1,0)

df.loc[df.groupby('CUSTOMER')['PERIOD'].idxmax()] 

      PERIOD CUSTOMER  AMOUNTSOLD timedelta  Exists
3 2020-09-01       C1        1000   31 days       1
4 2020-09-01       C2        1000   31 days       1
2 2020-08-01       C3        1000       NaT       0

【讨论】:

  • 感谢 Manakin,完美地完成了这项工作!
  • @ChrisRitchie - 谢谢,我不想对最终的布尔值做出假设来衡量实际的日期差异,但你看起来足够聪明,可以解决:)
【解决方案2】:

如果你想在某个月份拥有它,你可以这样做:

currentmonth = "2020-09"

lastmonth = "2020-08"

df[df["PERIOD"] == lastmonth][df[df["PERIOD"] == lastmonth]["CUSTOMER"].isin(df[df["PERIOD"] == currentmonth]["CUSTOMER"])]

【讨论】:

    猜你喜欢
    • 2020-02-01
    • 2019-07-24
    • 1970-01-01
    • 2015-02-20
    • 2021-10-12
    • 1970-01-01
    • 2020-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多