python - 计算自上次维护以来的日期差异的有效方法是什么?

标签 python pandas

下面是我正在使用的示例数据集:

            maint id
datetime            
2015-01-01    1.0  a
2015-01-02    NaN  a
2015-01-03    NaN  a
2015-01-04    1.0  a
2015-01-05    NaN  a
2015-01-06    NaN  a
2015-01-07    NaN  a
2015-01-01    NaN  b
2015-01-02    NaN  b
2015-01-03    1.0  b
2015-01-04    1.0  b
2015-01-05    NaN  b
2015-01-06    NaN  b
2015-01-07    NaN  b

我想要得到的是日差,因为df['maint']是1。

            maint id  days
datetime                  
2015-01-01    1.0  a     0
2015-01-02    NaN  a     1
2015-01-03    NaN  a     2
2015-01-04    1.0  a     0
2015-01-05    NaN  a     1
2015-01-06    NaN  a     2
2015-01-07    NaN  a     3
2015-01-01    NaN  b     0
2015-01-02    NaN  b     0
2015-01-03    1.0  b     0
2015-01-04    1.0  b     0
2015-01-05    NaN  b     1
2015-01-06    NaN  b     2
2015-01-07    NaN  b     3

因为我有几千个不同的ID,而且每个ID都有几年的维护记录。我想找到一种计算日差的有效方法。

最佳答案

用途:

df['days'] = df.index.where(df['maint'].eq(1))
df['days'] = (df.index - df.groupby('id')['days'].ffill()).fillna(pd.Timedelta(0)).dt.days
print (df)
            maint id  days
datetime                  
2015-01-01    1.0  a     0
2015-01-02    NaN  a     1
2015-01-03    NaN  a     2
2015-01-04    1.0  a     0
2015-01-05    NaN  a     1
2015-01-06    NaN  a     2
2015-01-07    NaN  a     3
2015-01-01    NaN  b     0
2015-01-02    NaN  b     0
2015-01-03    1.0  b     0
2015-01-04    1.0  b     0
2015-01-05    NaN  b     1
2015-01-06    NaN  b     2
2015-01-07    NaN  b     3

说明:

  1. 首先创建新列 days,其值为 df.index,其中 maint1,其他值为NaT
  2. GroupBy.ffill 创建的新系列减去 index ,将 NaN 替换为 0 timedelta 并最后将其转换为天数 Series.dt.days

关于python - 计算自上次维护以来的日期差异的有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55085235/

相关文章:

python - 测试依赖时间的方法

c# - 可以让 Python 向 C# 发送一个可变长度的字符串数组吗?

Python Selenium 在 WordPress 管理页面中不起作用

python - 如何从文件中读取两行并在 for 循环中创建动态键,后续

python - pandas 对不规则间隔时间数据进行重新采样

python - 为 df rows 中的每个条目创建单行

python - 将 Python 扩展安装到特定位置

python - Maya 查找对象是否实例化?

python - Pandas相当于一对多关系的vlookup,返回一个结果

python - 根据变量范围合并行