熊猫累计计数(基于条件)

时间:2021-07-12 13:18:24

标签: python pandas conditional-statements countif cumsum

我有一个 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()

非常感谢!!

1 个答案:

答案 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