【发布时间】:2021-07-12 13:18:24
【问题描述】:
我有一个 DataFrame df,我正在尝试根据 at 列中的日期大于或等于 recovery_date 列中的日期的条件计算累积计数。
这里是原文df:
at recovery_date
0 2020-02-01 2020-03-02
1 2020-03-01 2020-03-31
2 2020-04-01 2020-05-01
3 2020-05-01 2020-05-31
4 2020-06-01 2020-07-01
这是期望的结果:
at recovery_date result
0 2020-02-01 2020-03-02 0
1 2020-03-01 2020-03-31 0
2 2020-04-01 2020-05-01 2
3 2020-05-01 2020-05-31 3
4 2020-06-01 2020-07-01 4
解释是对于每个at,在它之前或同一天有x个recovery_dates。
我试图避免使用 for 循环,因为我正在为一个时间敏感的应用程序实现它。
这是我能够找到的解决方案,但我正在寻找更高效的解决方案:
def how_many(at: pd.Timestamp, recoveries: pd.Series) -> int:
return (at >= recoveries).sum()
df["result"] = [how_many(row["at"], df["recovery_date"][:idx]) for idx, row in df.iterrows()]
非常感谢!!
【问题讨论】:
-
您的示例似乎不正确,所有
recovery_date都大于at,这与您的输出不匹配 -
@mozway。我认为 OP 忘了说当前的
at是否大于之前的recovery_date,因为它与输出匹配。我错了吗? -
很有可能。 OP 应该编辑问题以明确这一点。
标签: python pandas conditional-statements countif cumsum