让我们考虑两个数据帧:

import numpy as np
import pandas as pd

df = pd.DataFrame([1, 2, 3, 2, 5, 4, 3, 6, 7])

check_df = pd.DataFrame([3, 2, 5, 4, 3, 6, 4, 2, 1])

如果想做以下事情:

  1. 如果为df[1] > check_df[1]df[2] > check_df[1]df[3] > check_df[1],则我们将其赋值为df 1,否则为0
  2. 如果为df[2] > check_df[2]df[3] > check_df[2]df[4] > check_df[2],则我们将其赋值为df 1,否则为0
  3. 我们将相同的算法应用于数据帧的末尾

我的原始代码如下:

df_copy = df.copy()
for i in range(len(df) - 3):
    moving_df = df.iloc[i:i+3]
    if (moving_df >check_df.iloc[i]).any()[0]:
        df_copy.iloc[i] = 1
    else:
        df_copy.iloc[i] = -1
df_copy


    0
0   -1
1   1
2   -1
3   1
4   1
5   -1
6   3
7   6
8   7

你能给我一个建议,如果有任何可能性,这样做没有循环?

推荐答案

IIUC,这很容易用rolling.min:

df['out'] = np.where(df[0].rolling(N, min_periods=1).max().shift(1-N).gt(check_df[0]),
                     1, -1)

输出:

   0  out
0  1   -1
1  2    1
2  3   -1
3  2    1
4  5    1
5  4   -1
6  3    1
7  6   -1
8  7   -1

to keep the last items as is:

m = df[0].rolling(N).max().shift(1-N)
df['out'] = np.where(m.gt(check_df[0]),
                     1, -1)
df['out'] = df['out'].mask(m.isna(), df[0])

输出:

   0  out
0  1   -1
1  2    1
2  3   -1
3  2    1
4  5    1
5  4   -1
6  3    1
7  6    6
8  7    7

Python相关问答推荐

标题:如何在Python中使用嵌套饼图可视化分层数据?

scikit-learn导入无法导入名称METRIC_MAPPING64'

2D空间中的反旋算法

' osmnx.shortest_track '返回有效源 node 和目标 node 的'无'

pyscript中的压痕问题

实现自定义QWidgets作为QTimeEdit的弹出窗口

使用密钥字典重新配置嵌套字典密钥名

* 动态地 * 修饰Python中的递归函数

python中csv. Dictreader. fieldname的类型是什么?'

基于Scipy插值法的三次样条系数

python sklearn ValueError:使用序列设置数组元素

对数据帧进行分组,并按组间等概率抽样n行

无法在盐流道中获得柱子

如何在开始迭代自定义迭代器类时重置索引属性?

使用_in链接操作管道传输的中间结果是否可用于链中的后续函数?

Parsel无法访问嵌套元素

判断字典键、值对是否满足用户定义的搜索条件

具有数值数组问题的递归矩阵构造(广播?)

如何正确设置ALLOWED_HOST以允许网络中的其他计算机访问Web

如何在Python中使用Polars向SQLite数据库写入数据?