python - 根据同一行和后一行的另一列中的值创建数据框列

标签 python pandas

我有一个数据框df,其头部看起来像:

        BB       DATE         PX
0  1333 JP 2014-03-04   471300.0       
1  1333 JP 2014-04-04   132900.0       
2  1333 JP 2014-04-07   150400.0       
3  1333 JP 2014-04-13   191900.0       
4  2345 JP 2014-04-14   218900.0       

我想创建一个名为 FLAG 的新列,该列使用 2 个条件进行设置 1.查看名为 BB 的列,并为每一行获取当前值,然后回顾前一天并比较这些值。如果值相同

  • 如果当前DATE与昨天日期之间的绝对差大于3
  • 然后设置FLAG = 1,否则设置FLAG =0

    因此,在此示例中,新的 FLAG 列将如下所示

            BB       DATE         PX  FLAG
    0  1333 JP 2014-03-04   471300.0     0  
    1  1333 JP 2014-04-04   132900.0     1  
    2  1333 JP 2014-04-07   150400.0     0  
    3  1333 JP 2014-04-13   191900.0     1  
    4  2345 JP 2014-04-14   218900.0     0
    

    如果索引等于 1,您可以看到该行的 BB 值与之前行的值相同,但两行的 DATE 之间的绝对差为大于 3。当索引 = 3 时也是如此。

    我已经尝试过:

     if df.BB.shift(1) = df.BB.shift(0) & abs(df.DATE.shift(1) - df.DATE.shift(0)) >3 :
        df['FLAG'] = 1 
        else:
        df['FLAG'] = 0
    

    但是无法让它工作。

    最佳答案

    假设您的 DATE 列是 pandas 日期时间对象,一个衬垫:

    df['FLAG'] = ((df['BB'].shift(1)==df['BB']) & (df['DATE'].diff()>pd.Timedelta(days=3))).astype(int)
    

    输出:

           BB       DATE        PX  FLAG
    0  1333JP 2014-03-04  471300.0     0
    1  1333JP 2014-04-04  132900.0     1
    2  1333JP 2014-04-07  150400.0     0
    3  1333JP 2014-04-13  191900.0     1
    4  2345JP 2014-04-14  218900.0     0
    

    关于python - 根据同一行和后一行的另一列中的值创建数据框列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53110441/

    相关文章:

    python - 什么时候在 django rest 框架序列化程序中调用创建和更新?

    python - 在 NumPy 中使用极小的 float

    python - Pandas 在正则表达式上 split

    python - 如何按两个变量分组的条形图

    python - Pandas 数据帧 : Update values in a certain columns for last n rows

    仅在远程运行时尝试导入包时出现 python SyntaxError

    python - 创建一个距离中心有欧氏距离的二维 Numpy 数组

    python - Pandas - 日期范围内每一天的新行

    python - 随机选择字符串中的元素百分比并更改值

    python - 将数据框分解为子集/组的新数据框。从其他数据框创建数据子集/组的新数据框