【问题标题】:loop for making comparisons on pandas用于对 pandas 进行比较的循环
【发布时间】:2020-05-07 00:47:23
【问题描述】:

我需要帮助在我的数据框上创建一个新列

我有以下数据框:

          OPEN    CLOSE
1      1.10074  1.10073
2      1.10073  1.10083
3      1.10083  1.10082
4      1.10082  1.10070
5      1.10071  1.10073
6      1.10073  1.10083
7      1.10083  1.10083
8      1.10083  1.10086
9      1.10088  1.10073
10     1.10073  1.10075

每当大于或小于上一个时,我想标记'CLOSE'列中的值

示例退出:

          OPEN    CLOSE   TAG
1      1.10074  1.10073     ?   #anything can be placed
2      1.10073  1.10083     1   #value higher than previous
3      1.10083  1.10082     0
4      1.10082  1.10070     0
5      1.10071  1.10073     1   #value higher than previous
6      1.10073  1.10083     1   #value higher than previous
7      1.10083  1.10083     ?   #when equal anything can be placed
8      1.10083  1.10086     1   #value higher than previous
9      1.10088  1.10073     0
10     1.10073  1.10075     1   #value higher than previous

最好的方法是什么?我试过枚举,但我做不到。感谢您的帮助。

【问题讨论】:

标签: python pandas for-loop


【解决方案1】:

您可以使用.shift(n),其中n 表示要比较的先前行的数量:

(df['CLOSE'] > df['CLOSE'].shift(1)).astype(int)

【讨论】:

    【解决方案2】:

    开始于:

    df['prev']=df['CLOSE'].shift(1)
    

    结果:

        OPEN    CLOSE   prev
    1   1.10074 1.10073 NaN
    2   1.10073 1.10083 1.10073
    3   1.10083 1.10082 1.10083
    4   1.10082 1.10070 1.10082
    5   1.10071 1.10073 1.10070
    6   1.10073 1.10083 1.10073
    7   1.10083 1.10083 1.10083
    8   1.10083 1.10086 1.10083
    9   1.10088 1.10073 1.10086
    10  1.10073 1.10075 1.10073
    

    比添加:

    import numpy as np
    df['TAG'] = np.where(df['CLOSE']-df['prev']>0,1,0)
    

    结果:

        OPEN    CLOSE   prev       TAG
    1   1.10074 1.10073 NaN 0
    2   1.10073 1.10083 1.10073    1
    3   1.10083 1.10082 1.10083    0
    4   1.10082 1.10070 1.10082    0
    5   1.10071 1.10073 1.10070    1
    6   1.10073 1.10083 1.10073    1
    7   1.10083 1.10083 1.10083    0
    8   1.10083 1.10086 1.10083    1
    9   1.10088 1.10073 1.10086    0
    10  1.10073 1.10075 1.10073    1
    

    如果你想在 equals 的情况下改进,你可以这样做:

    df['TAG'] = np.where(df['CLOSE']-df['prev']>0,1,np.where(df['CLOSE']-df['prev']==0,'EQUALS',0))
    

    想要的结果:

        OPEN    CLOSE   prev       TAG
    1   1.10074 1.10073 NaN 0
    2   1.10073 1.10083 1.10073    1
    3   1.10083 1.10082 1.10083    0
    4   1.10082 1.10070 1.10082    0
    5   1.10071 1.10073 1.10070    1
    6   1.10073 1.10083 1.10073    1
    7   1.10083 1.10083 1.10083    EQUALS
    8   1.10083 1.10086 1.10083    1
    9   1.10088 1.10073 1.10086    0
    10  1.10073 1.10075 1.10073    1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-06
      • 2011-12-23
      • 1970-01-01
      • 2011-11-14
      • 1970-01-01
      相关资源
      最近更新 更多