gpt4 book ai didi

python - 如何计算python中某个范围内不为零的行数?

转载 作者:太空宇宙 更新时间:2023-11-04 10:02:03 26 4
gpt4 key购买 nike

我有一个由数字 0 或 1 组成的 pandas 系列。

2016-01-01    0
2016-01-02 1
2016-01-03 1
2016-01-04 0
2016-01-05 1
2016-01-06 1
2016-01-08 1
...

我想使用这个系列制作一个数据框,添加另一个系列,提供关于在特定时间段内存在多少个 1 的信息。

例如,如果周期为 5 天,则数据框将如下所示

              Value   1s_for_the_last_5days
2016-01-01 0
2016-01-02 1
2016-01-03 1
2016-01-04 0
2016-01-05 1 3
2016-01-06 1 4
2016-01-08 1 4
...

此外,我想知道在如下情况下,我是否可以在一定范围内统计不为零的行数。

              Value   Not_0_rows_for_the_last_5days
2016-01-01 0
2016-01-02 1.1
2016-01-03 0.4
2016-01-04 0
2016-01-05 0.6 3
2016-01-06 0.2 4
2016-01-08 10 4

感谢您阅读本文。如果您能就此问题给我任何解决方案或提示,我将不胜感激。

最佳答案

您可以使用 rolling为此,它会创建一个大小合适的窗口,并在应用诸如总和之类的聚合时遍历给定的列。

首先创建一些虚拟数据:

import pandas as pd
import numpy as np

ser = pd.Series(np.random.randint(0, 2, size=10),
index=pd.date_range("2016-01-01", periods=10),
name="Value")
print(ser)

2016-01-01 1
2016-01-02 0
2016-01-03 0
2016-01-04 0
2016-01-05 0
2016-01-06 0
2016-01-07 0
2016-01-08 0
2016-01-09 1
2016-01-10 0
Freq: D, Name: Value, dtype: int64

现在,使用滚动:

summed = ser.rolling(5).sum()
print(summed)

2016-01-01 NaN
2016-01-02 NaN
2016-01-03 NaN
2016-01-04 NaN
2016-01-05 1.0
2016-01-06 0.0
2016-01-07 0.0
2016-01-08 0.0
2016-01-09 1.0
2016-01-10 1.0
Freq: D, Name: Value, dtype: float64

最后,创建结果数据框:

df = pd.DataFrame({"Value": ser, "Summed": summed})
print(df)

Summed Value
2016-01-01 NaN 1
2016-01-02 NaN 0
2016-01-03 NaN 0
2016-01-04 NaN 0
2016-01-05 1.0 0
2016-01-06 0.0 0
2016-01-07 0.0 0
2016-01-08 0.0 0
2016-01-09 1.0 1
2016-01-10 1.0 0

为了计算任意值,在滚动窗口上结合 apply 定义您自己的聚合函数,例如:

# dummy function to count zeros
count_func = lambda x: (x==0).sum()

summed = ser.rolling(5).apply(count_func)
print(summed)

您可以将 0 替换为原始系列的任何值或值的组合。

关于python - 如何计算python中某个范围内不为零的行数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43026647/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com