Pandas 计算最后 n 行中大于当前行的值

2023-11-21

如何获取最后n行中大于当前行的值的计数?

假设我们有一个如下的数据框:

    col_a
0    8.4
1   11.3
2    7.2
3    6.5
4    4.5
5    8.9

我正在尝试获取如下表,其中 n=3。

    col_a   col_b
0     8.4       0
1    11.3       0
2     7.2       2
3     6.5       3
4     4.5       3
5     8.9       0

提前致谢。


在 pandas 中最好不要循环,因为速度慢,这里更好用rolling具有自定义功能:

n = 3
df['new'] = (df['col_a'].rolling(n+1, min_periods=1)
                        .apply(lambda x: (x[-1] < x[:-1]).sum())
                        .astype(int))
print (df)
   col_a  new
0    8.4    0
1   11.3    0
2    7.2    2
3    6.5    3
4    4.5    3
5    8.9    0

如果性能很重要,请使用strides:

n = 3
x = np.concatenate([[np.nan] * (n), df['col_a'].values])

def rolling_window(a, window):
    shape = a.shape[:-1] + (a.shape[-1] - window + 1, window)
    strides = a.strides + (a.strides[-1],)
    return np.lib.stride_tricks.as_strided(a, shape=shape, strides=strides)
arr = rolling_window(x, n + 1)

df['new'] = (arr[:, :-1] > arr[:, [-1]]).sum(axis=1)
print (df)
   col_a  new
0    8.4    0
1   11.3    0
2    7.2    2
3    6.5    3
4    4.5    3
5    8.9    0

表现: 这里用的是perfplot在小窗口里n = 3:

g1

np.random.seed(1256)
n = 3

def rolling_window(a, window):
    shape = a.shape[:-1] + (a.shape[-1] - window + 1, window)
    strides = a.strides + (a.strides[-1],)
    return np.lib.stride_tricks.as_strided(a, shape=shape, strides=strides)

def roll(df):
    df['new'] = (df['col_a'].rolling(n+1, min_periods=1).apply(lambda x: (x[-1] < x[:-1]).sum(), raw=True).astype(int))
    return df

def list_comp(df):
    df['count'] = [(j < df['col_a'].iloc[max(0, i-3):i]).sum() for i, j in df['col_a'].items()]
    return df

def strides(df):
    x = np.concatenate([[np.nan] * (n), df['col_a'].values])
    arr = rolling_window(x, n + 1)
    df['new1'] = (arr[:, :-1] > arr[:, [-1]]).sum(axis=1)
    return df


def make_df(n):
    df = pd.DataFrame(np.random.randint(20, size=n), columns=['col_a'])
    return df

perfplot.show(
    setup=make_df,
    kernels=[list_comp, roll, strides],
    n_range=[2**k for k in range(2, 15)],
    logx=True,
    logy=True,
    xlabel='len(df)')

我也对大窗口的性能感到好奇,n = 100:

g2

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pandas 计算最后 n 行中大于当前行的值 的相关文章

随机推荐

  • 对具有 NaN 的列进行缩尾处理不会更改最大值

    请注意 不久前有人提出了类似的问题 但从未得到答复 请参阅缩尾处理不会改变最大值 我在尝试着winsorize数据框中的列使用winsorize from scipy stats mstats 如果列中没有 NaN 值 则该过程正常运行 然
  • Java流/收集:将具有多个字段的一项映射到多个键

    我想尝试使用 java 收集器编写以下代码 给定一个人的 2 个属性 名字和姓氏 我想获取一个包含唯一的名字或姓氏作为键的映射 以及相应人员的列表 这是一组数据 Person person1 new Person person1 setFi
  • Android 处理程序更改 WeakReference

    我的静态处理程序有一个WeakReference to my Activity 这是为了防止有据可查的内存泄漏问题 我发布了一条长时间延迟的消息 我希望将此消息传递到我的活动 应该位于前台 我担心的是 在方向改变时 我的活动被销毁 并且处理
  • PHP5 使用 fopen 时出现无法打开流:HTTP 请求失败错误

    这个问题似乎过去在谷歌和这里到处都有讨论 但我还没有找到解决方案 一个非常简单的 fopen 给了我一个 PHP 警告 fopen http www google ca 无法打开流 HTTP 请求失败 我正在获取的 URL 并不重要 因为即
  • SQL Server 循环删除记录超出锁定超时

    我正在测试一个可以一次删除很多很多记录的过程 这不可以TRUNCATE TABLE 因为里面有需要保留的记录 由于体积的原因 我将删除分成了与此类似的循环 Do not block if records are locked SET LOC
  • 当应用程序未打开时收到推送通知时更新徽章编号

    我有一个应用程序 其中我面临这样的问题 徽章编号仅在打开通知时更新 但即使应用程序未打开 我也需要更新徽章编号 有人能帮我吗 您需要设置一个值badge输入您的推送通知负载 根据您的描述 听起来只有您的应用程序正在更新徽章编号 而不是通知本
  • 为什么我们需要在 eval JSON 中添加括号? [复制]

    这个问题在这里已经有答案了 为什么需要添加以下代码 and 用于评估 var strJson eval status val replace PS status val 返回类似的东西 10000048 1 25000175 2 25000
  • 用户可以清除 Service Worker 缓存吗?

    我已经构建了一个使用缓存的渐进式 Web 应用程序 但我不清楚用户是否可以 无意或故意 清除服务工作线程缓存 这可能会清除我的跟踪数据 当用户清除浏览数据 cookie 时 这会清除所有站点存储 包括 SW 缓存 cookie 本地存储 i
  • 将 XCTest 导入到现有项目中

    我添加了一个新目标作为 Cocoa Touch 单元测试包 名为目录 MyAppTests 并且实际框架未处于活动状态 它以红色突出显示 当我通过 构建阶段 选项卡技术中的 链接二进制文件与库 添加框架时 会添加一个新框架 而不是更新通过添
  • FLEX 中的重新调度事件

    在 FLEX 应用程序中 我试图 重新调度 自定义事件 IE 组件1执行dispatchEvnet event 组件2注册该事件的处理程序 该处理程序的唯一功能再次是dispatch event 最后 组件 3 监听来自组件 2 的事件 我
  • 了解 RecyclerView setHasFixedSize

    我有点难以理解setHasFixedSize 我知道它用于优化时的大小RecyclerView从文档来看 没有改变 但这意味着什么 在大多数常见情况下ListView几乎总是有固定的大小 什么情况下它不是固定大小 这是否意味着它在屏幕上占据
  • 如何更改Popup MenuButton弹窗的背景颜色?

    我想更改弹出菜单按钮窗口的背景颜色 我应该怎么办 我希望我能得到你的帮助 谢谢 当我改变容器的颜色时 有些角落不能改变颜色 new IconButton icon new Icon Icons search color Colors whi
  • 如何从fragment中listview的onitemclick事件中调用startactivity或调用intent?

    我有一个具有自己的布局的片段 在布局中 有一个列表视图 我附加了 onitemclick 侦听器 单击列表行时将启动 打开意图 不幸的是 我总是收到这个错误 从 Activity 上下文外部调用 startActivity 需要 FLAG
  • 如何查找影响特定列的存储过程列表?

    我正在研究这个大型数据库 其中 SP 中嵌入了很多业务知识 我知道 并且 SP 之间有很多链接 即一个存储过程调用另一个存储过程 我想找出更新特定列的存储过程列表 我该怎么做呢 使用 showplan All 中概述的用于存储过程的 SQL
  • D3.js:如何组合 2 个数据集以创建地图并在鼠标悬停时显示值?

    我想在 D3 js 中的地图上合并两个数据集 例如 第一个数据集 json 格式的空间数据 第二个数据集 csv 中区域的数据 gt 当您将鼠标悬停在地图上时 工具提示应显示一个句子 其中包含第二个数据集中的一些数据 我可以制作地图并显示包
  • 选择包含“foo”的属性的正确 XPath 是什么?

    给定这个 XML XPath 返回其所有元素prop属性包含Foo 前三个节点
  • Android:如何在 root 设备上获取帧缓冲区(屏幕截图)?

    我试过 process Runtime getRuntime exec su c cat dev graphics fb0 gt sdcard frame raw process waitFor 但它不起作用 我的设备已植根 我看到很多答案
  • 高枕无忧,初始化参数 - 如何访问?

    我想在我的 web xml 中有一些初始化参数 并稍后在应用程序中检索它们 我知道当我有一个普通的 servlet 时我可以做到这一点 然而 使用resteasy 我将HttpServletDispatcher配置为我的默认servlet
  • 如何将焦点添加到表格行?

    我有一个生成的表AngularJS 这是我的 HTML table class my table thead tr th Name th th Address th th Celphone th tr thead tbody tr td c
  • Pandas 计算最后 n 行中大于当前行的值

    如何获取最后n行中大于当前行的值的计数 假设我们有一个如下的数据框 col a 0 8 4 1 11 3 2 7 2 3 6 5 4 4 5 5 8 9 我正在尝试获取如下表 其中 n 3 col a col b 0 8 4 0 1 11