【问题标题】:In pandas how to calculate 'Countif' on a moving window basis?在熊猫中,如何在移动窗口的基础上计算“Countif”?
【发布时间】:2015-02-14 02:32:03
【问题描述】:

给定

A = pd.DataFrame([[1, 5, -2], [2, 4, -4], [3, 3, -1], [4, 2, 2], [5, 1, 4]],
             columns=['A', 'B', 'C'], index=[1, 2, 3, 4, 5])

假设您要滚动计算最后 3 个观测值中 C 列中小于 0 的观测值数量。在 excel 中,您可以使用条件在指定窗口上滑动“countif”计算,所需的结果是:

D = # of x < 0 on a rolling window basis of size 3

A
Out[79]: 
   A  B  C  D
1  1  5 -2  
2  2  4 -4
3  3  3 -1  3
4  4  2  2  2
5  5  1  4  1

如何使用 Pandas 以高效(Pythonic)的方式做到这一点?

谢谢

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    您可以在一列布尔值上使用rolling_sum

    >>> A["D"] = pd.rolling_sum((A["C"] < 0), 3)
    >>> A
       A  B  C   D
    1  1  5 -2 NaN
    2  2  4 -4 NaN
    3  3  3 -1   3
    4  4  2  2   2
    5  5  1  4   1
    

    这是有效的,因为 True ~ 1 和 False ~ 0,我们有

    >>> A["C"] < 0
    1     True
    2     True
    3     True
    4    False
    5    False
    Name: C, dtype: bool
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-10
      • 1970-01-01
      • 1970-01-01
      • 2020-11-18
      • 1970-01-01
      • 2018-09-02
      • 2019-12-13
      • 1970-01-01
      相关资源
      最近更新 更多