python - Pandas :只保留累积变化超过阈值的每一行?

标签 python pandas numpy

我有兴趣提取列值累积至少增加 5 或累积减少至少 5 的行,然后获取这些累积变化的迹象,up_or_down .

例如,假设我想将其应用于以下列 y:

df = pd.DataFrame({'x': range(16), 'y': [1,10,14,12,13,9,4,2,6,7,10,11,16,17,14,11]})

它应该产生:

x   y        # up_or_down
1   10       # +1
6   4        # -1
10  10       # +1
12  16       # +1
15  11       # -1

我的数据框非常大,所以我希望有一种很好的矢量化方式来使用 pandas 的 API 在本地执行此操作,而不是使用 iterrows() 循环遍历它。

最佳答案

这是解决方案的核心

def big_diff(y):
    val = y.values
    r = val[0]
    for i, x in enumerate(val):
        d = r - x
        if abs(d) >= 5:
            yield i, 1 if d < 0 else -1
            r = x

然后你可以做这样的事情

slc = np.array(list(big_diff(df.y)))
df_slcd = pd.DataFrame(df.values[slc[:, 0]], df.index[slc[:, 0]], df.columns)
signs = pd.Series(slc[:, 1], df.index[slc[:, 0]], name='up_or_down')

df_slcd

enter image description here

signs

1     1
6    -1
10    1
12    1
15   -1
Name: up_or_down, dtype: int64

pd.concat([df_slcd, signs], axis=1)

enter image description here

关于python - Pandas :只保留累积变化超过阈值的每一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39432140/

相关文章:

python - 如何删除Python字符串列表中特定字符后面的子字符串

python - 绘制圆弧 : anomaly in the plot

python - 用值填充非常大的数据框的快速方法

python - 将值从 bash 传输到 python 脚本

python - 在多索引 Pandas 中遍历 level=1 中的每个索引项

python - 从 Numpy 数组中删除列的有效方法?

python - 运行时重载运算符

javascript - 使用 ReactJS 和 python Flask。一般的做法

python - 在 Python 中向数据框列添加百分号

python - 如何通过将日期与该数据框中的日期时间对象进行比较来获取数据框中的索引值?