【问题标题】:Bin the date into month将日期放入月份
【发布时间】:2020-02-09 07:53:17
【问题描述】:

现在我有一张桌子:

Score  Customer ID      my_dates        Threshold Model_name   is_alert
50         8           2017-08-05         50     Mod1          yes
50         9           2017-12-05         50     Mod1          yes
50         28          2017-05-22         50     Mod2          yes
50         28          2017-05-26         50     Mod2          yes
50         36          2017-06-20         50     Mod2          yes

如果分数等于或超过阈值,is_alert 将显示“是”

现在我想将日期放入以下格式并打印每个模型下每个 bin 中有多少警报,但如果在 7 天内一位客户收到多次警报,则只有第一次命中才会计入总分:

Model_name   Jan-17    Feb-17    Mar-17    APR-17   May-17   Jun-17 
Mod1                                                           
Mod2                                                           

有人可以帮我吗?谢谢

【问题讨论】:

  • 请提供您编写的代码。

标签: python pandas python-datetime python-dateutil


【解决方案1】:

使用crosstab 并通过Series.dt.to_period 将日期时间转换为月份,最后通过PeriodIndex.strftime 转换为月份名称,但在通过DataFrameGroupBy.diff 获取每个组的差异之前,并过滤具有缺失值的行(每组的第一行) 和小于或等于 7 by Series.geboolean indexing:

df['my_dates'] = pd.to_datetime(df['my_dates'])

m = df['my_dates'].dt.to_period('m')
df['diff'] = df.groupby(['Model_name'])['my_dates'].diff().dt.days
print (df)
   Score  Customer ID   my_dates  Threshold Model_name is_alert   diff
0     50            8 2017-08-05         50       Mod1      yes    NaN
1     50            9 2017-12-05         50       Mod1      yes  122.0
2     50           28 2017-05-22         50       Mod2      yes    NaN
3     50           28 2017-05-26         50       Mod2      yes    4.0
4     50           36 2017-06-20         50       Mod2      yes   25.0

df = df[df['diff'].ge(7) | df['diff'].isna()]
df1 = pd.crosstab(df['Model_name'], m)
df1.columns = df1.columns.strftime('%b-%y')
print (df1)
my_dates    May-17  Jun-17  Aug-17  Dec-17
Model_name                                
Mod1             0       0       1       1
Mod2             1       1       0       0

【讨论】:

  • 非常感谢。但是我还需要检查这两个日期是否在7天内,所以May-17下的Mod2应该是1。我不知道该怎么做?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多