Python比较上一行和下一个行值



我有一个数据集,如下列带(c1)。将值与同一列中的上一个值和同一列中的下一个值进行比较。基于某些条件标签行。

 C1
----
 3
 2
 5
 3
 2
 4

条件:

x是当前值
p是先前的值
n是下一个值
第一个和最后一个值默认为" 0"

  1. 如果x大于p,大于n,则标记为" 0:

    "

    p<x>n = 0

  2. p>x<n则x是" 1&quot"

  3. p<x<n则x是" 2"

  4. p>x>n则x是" 3&quot"

要存储的结果是单独的列C2

最终结果:

 C1  |  C2
-----+-----
 3   |  0
 2   |  2
 5   |  0
 3   |  3
 2   |  1
 4   |  0

我相信Shift是去这里的方式,

i从创建数据框和两个列开始,一个移动以显示下一个数字,另一个是在同一行上显示上一个数字。我还创建了一个空白列,我们将将您的目标输入(C2)

df = pd.DataFrame([3,2,5,3,2,4], columns=['C1'])
df['P'] = df.C1.shift(1).fillna(0)
df['N'] = df.C1.shift(-1).fillna(0)
df['C2'] = np.nan

给我们:

    C1  P   N   C2
0   3   0.0 2.0 NaN
1   2   3.0 5.0 NaN
2   5   2.0 3.0 NaN
3   3   5.0 2.0 NaN
4   2   3.0 4.0 NaN
5   4   2.0 0.0 NaN

然后我们进行比较,放下我们制作的两个移动的列,然后完成!

for index, row in df.iterrows():
    if (row.P < row.C1) and (row.C1 > row.N):
        df.at[index, 'C2'] = 0
    elif (row.P > row.C1) and (row.C1 < row.N):
        df.at[index, 'C2'] = 1
    elif (row.P < row.C1) and (row.C1 < row.N):
        df.at[index, 'C2'] = 2
    elif (row.P > row.C1) and (row.C1 > row.N):
        df.at[index, 'C2'] = 3
df.drop(['P', 'N'], 1, inplace=True)

这使我们有:

    C1  C2
0   3   0.0
1   2   1.0
2   5   0.0
3   3   3.0
4   2   1.0
5   4   0.0

希望这会有所帮助!

c1 = [3,2,5,3,2,4]
c2 = [0]
for i in range(1,len(c1)-1):
    p = c1[i-1]
    x = c1[i]
    n = c1[i+1]
    if p < x and x > n:
        c2.append(0)
    elif p > x and x < n:
        c2.append(1)
    elif p < x and x < n:
        c2.append(2)
    elif p > x and x > n:
        c2.append(3)
c2.append(0)
print(c2)
>>> [0, 1, 0, 3, 1, 0]

我相信您弄错了示例输出C2列表,而您给出的条件是不同的。

使用Shift在数据框架中创建一个新的滞后列。然后,您可以轻松地以矢量化的方式比较两个列的值(这很快),并将其存储在新列中。

相关内容

  • 没有找到相关文章

最新更新