我有一个 DataFrame df
,我正在尝试根据 at
列中的日期大于或等于 {{1} 列中的日期的条件计算累积计数}.
这是原来的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
有 x 个 at
在它之前或在同一天。
我试图避免使用 for 循环,因为我正在为时间敏感的应用程序实现它。
这是我能够找到的解决方案,但我正在寻找更高效的解决方案:
recovery_date
def how_many(at: pd.Timestamp, recoveries: pd.Series) -> int:
return (at >= recoveries).sum()
非常感谢!!
答案 0 :(得分:0)
您正在寻找这样的东西:
df['result'] = df['at'].apply(lambda at: (at >= df['recovery_date']).sum())
它的作用是:对于 at
列中的每个值,检查是否有任何 recovery_date
大于或等于(此时我们有一个 True (=1) 的数组)和 False (=0) 值)然后将它们相加。
这会产生您想要的输出
at recovery_date count result
0 2020-02-01 2020-03-02 1 0
1 2020-03-01 2020-03-31 1 0
2 2020-04-01 2020-05-01 1 2
3 2020-05-01 2020-05-31 1 3
4 2020-06-01 2020-07-01 1 4