首页 > 解决方案 > 自从第一堂课最后一次见到熊猫以来的天数

问题描述

我有 pandas 数据框,我想计算自每组最后一次看到第 1 类以来的天数,并将其作为列添加到数据框中。我该怎么做?

下面的代码给出了虚拟数据:

from datetime import datetime, timedelta
import numpy as np
import pandas as pd
dates = [datetime.today() + timedelta(delta) for delta in range(20)]
dates = [datetime.strftime(date, '%Y-%m-%d')[:10] for date in dates]
df = pd.DataFrame({'date':np.repeat(dates,2),
          'group':['a', 'b']*20,
           'class': np.random.choice([0,1], 40)})  
df['date'] = pd.to_datetime(df['date'])
df.head()

在此处输入图像描述

标签: pandas

解决方案


IIUC,你可以这样做:

last_seen = (df['date'].where(df['class']==1)
                       .groupby(df['group'])
                       .ffill()
                              )
df['day_passed'] = df['date'] - last_seen

输出(用 生成的数据np.random.seed(1)):

         date group  class day_passed
0  2020-03-17     a      1     0 days
1  2020-03-17     b      1     0 days
2  2020-03-18     a      0     1 days
3  2020-03-18     b      0     1 days
4  2020-03-19     a      1     0 days
5  2020-03-19     b      1     0 days
6  2020-03-20     a      1     0 days
7  2020-03-20     b      1     0 days
8  2020-03-21     a      1     0 days
9  2020-03-21     b      0     1 days

推荐阅读