python - Pandas 系列 - 计算列值之间的行数

标签 python pandas

Pandas 系列:

    2004-01-01    0
    2004-01-02    0
    2004-01-03    0
    2004-01-04    0
    2004-01-05    1
    2004-01-06    0
    2004-01-07    0
    2004-01-08    3
    2004-01-09    0
    2004-01-10    2
    2004-01-11    0

我想高效地添加一列,用于计算实际行和数字大于 0 的下一行之间的行数。

在这种情况下,它将是:

    2004-01-01    0     3
    2004-01-02    0     2
    2004-01-03    0     1
    2004-01-04    0     0
    2004-01-05    1     2
    2004-01-06    0     1
    2004-01-07    0     0
    2004-01-08    3     1
    2004-01-09    0     0
    2004-01-10    2     ...
    2004-01-11    0     ...

新列的第一个数字是 3,因为该行与下一行之间有 3 行,第一列上的值与 0 不同,依此类推。

有什么有效的方法吗?

最佳答案

用途:

df['B'] = df.groupby(df.A.gt(0).cumsum()).cumcount(ascending=False)
print (df)
            A  B
2004-01-01  0  3
2004-01-02  0  2
2004-01-03  0  1
2004-01-04  0  0
2004-01-05  1  2
2004-01-06  0  1
2004-01-07  0  0
2004-01-08  3  1
2004-01-09  0  0
2004-01-10  2  1
2004-01-11  0  0

说明:

第一个比较列 gt > bool 掩码:

print (df.A.gt(0))
2004-01-01    False
2004-01-02    False
2004-01-03    False
2004-01-04    False
2004-01-05     True
2004-01-06    False
2004-01-07    False
2004-01-08     True
2004-01-09    False
2004-01-10     True
2004-01-11    False
Name: A, dtype: bool

然后使用 Series.cumsum对于累积总和:

print (df.A.gt(0).cumsum())
2004-01-01    0
2004-01-02    0
2004-01-03    0
2004-01-04    0
2004-01-05    1
2004-01-06    1
2004-01-07    1
2004-01-08    2
2004-01-09    2
2004-01-10    3
2004-01-11    3
Name: A, dtype: int32

上次使用GroupBy.cumcount使用 ascending=False 表示计数器中的降序排列:

print (df.groupby(df.A.gt(0).cumsum()).cumcount(ascending=False))
2004-01-01    3
2004-01-02    2
2004-01-03    1
2004-01-04    0
2004-01-05    2
2004-01-06    1
2004-01-07    0
2004-01-08    1
2004-01-09    0
2004-01-10    1
2004-01-11    0
dtype: int64

关于python - Pandas 系列 - 计算列值之间的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54517731/

相关文章:

python - 如何选择特定列中给定值一定距离内的所有 DataFrame 行?

python - 单元测试失败时打印自定义字符串

python - 如何在上下文管理器中捕获异常?

python - 总结 Python 2 中计数器的所有值

python - Python 中的双 IIF 语句

python - Pandas/Python - 确定一定范围内多项式方程的局部最小值和最大值

python - 如何在添加另一个字段时从数据框中传递嵌套的 JSON?

python - Pandas:如何在分组行中添加行数

python - 用于多个输入框的弹出数字键盘(数字键盘)

python - 假设自动线程化的 scipy 和 numpy 函数没有使用多核