gpt4 book ai didi

python - 如何在某些条件下获取特定日期之前的行数

转载 作者:行者123 更新时间:2023-12-04 15:24:57 25 4
gpt4 key购买 nike

我有如下数据集:

    start_date  finish_date
0 2020-06-01 2020-06-02
1 2020-06-02 2020-06-04
2 2020-06-03 NaT
3 2020-06-04 2020-06-07
4 2020-06-05 2020-06-07
5 2020-06-06 NaT
6 2020-06-07 NaT

可以使用以下代码重新创建:

import pandas as pd

df = pd.DataFrame({
'start_date': ['2020-06-01', '2020-06-02', '2020-06-03', '2020-06-04', '2020-06-05', '2020-06-06', '2020-06-07'],
'finish_date': ['2020-06-02', '2020-06-04', pd.NA, '2020-06-07', '2020-06-07', pd.NA, pd.NA],
})
df['start_date'] = df['start_date'].apply(pd.to_datetime)
df['finish_date'] = df['finish_date'].apply(pd.to_datetime)

问题是:如何得到没有finish_date或者到reporting_date还没有完成的行数,下面是预期结果:

    reporting_date  not_finished
0 2020-06-01 1
1 2020-06-02 1
2 2020-06-03 2
3 2020-06-04 2
4 2020-06-05 3
5 2020-06-06 4
6 2020-06-07 3

解释上面的预期结果:

(当我说行时,我指的是数据集中的行而不是结果)

  • reporting_date 2020-06-01,行 0 已开始但未完成,这算作 1.
  • reporting_date 2020-06-02,行 0 已经完成,行 1 已经开始但还没有完成,这算 1
  • reporting_date 2020-06-03,行 12 已开始但尚未完成, 即 2
  • reporting_date 2020-06-04,行 2 已经完成,行 23 已经开始但还没有完成,算作 2
  • 等等..

最佳答案

使用列表推导将每个 reporting_datefinish_date 的先前值进行比较。要处理 NaT,您需要通过 pd.Timestamp.max

fillna
s = df.finish_date.fillna(pd.Timestamp.max)
df['not_finished'] = [(x < s.loc[:i]).sum() for i, x in enumerate(df.start_date)]

Out[35]:
start_date finish_date not_finished
0 2020-06-01 2020-06-02 1
1 2020-06-02 2020-06-04 1
2 2020-06-03 NaT 2
3 2020-06-04 2020-06-07 2
4 2020-06-05 2020-06-07 3
5 2020-06-06 NaT 4
6 2020-06-07 NaT 3

关于python - 如何在某些条件下获取特定日期之前的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62459884/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com