【问题标题】:Count elements satisfying a condition of two rows计算满足两行条件的元素
【发布时间】:2021-02-05 14:17:49
【问题描述】:
data
A  B
1  1
5  1
3  6
5  3
3  1
  1. 如何应用函数式编程计算 A[i]>A[i-1] 和 B[i]==B[i-1] 的行数

  2. 以及如何打印这些行?

它们是不同的任务。我知道我们可以先解决第二个任务,然后再解决任务 1。但我很好奇没有 for/any_other 循环的不同解决方案。

可以使用的数据结构:Numpy、Pandas、列表列表。

【问题讨论】:

  • 你试过了吗?
  • df[df['A'].diff().gt(0) & df['B'].diff().eq(0)]
  • 我不能使用 df.apply 的 np.apply_over_axes 的最大问题,因为它按元素工作(据我所知)。我在互联网上找不到任何东西。这就是为什么我试图在这里找到解决方案
  • @QuangHoang 这看起来很有希望

标签: python pandas numpy functional-programming aggregate


【解决方案1】:

numpy 中,你需要找出差异,然后比较新数组的值:

x = pd.DataFrame(data).values
diff = np.diff(x, axis=0)
mask = np.logical_and(diff[:,0]>0, diff[:,1]==0)

>>> mask
array([ True, False, False, False])

你现在可以解决这两个问题了:

  • 计算A[i]>A[i-1]B[i]==B[i-1]所在的行数:

    >>> np.sum(mask)
    1
    
  • 打印这些行:

    >>> x[np.r_[False, mask]]
    array([[5, 1]])
    

【讨论】:

    猜你喜欢
    • 2018-07-26
    • 1970-01-01
    • 2015-03-21
    • 2018-04-25
    • 2021-10-28
    • 2013-10-14
    • 2020-08-29
    • 2017-10-06
    • 2018-09-20
    相关资源
    最近更新 更多