基于同一行和b行上另一列中的值创建dataframe列

2024-05-15 05:24:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧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       

我想创建一个名为sayFLAG的新列,它是使用2个条件设置的 1.查看名为BB的列,对每一行取当前值,回顾前一天并比较值。如果值相同

以及

  1. 如果当前DATE和昨天日期之间的绝对差大于3

然后设置FLAG=1,否则设置FLAG=0

因此,在本例中,新的标志列如下所示

        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

如果index=1,则可以看到该行和前一行的BB值相同,但两行的DATE之间的绝对差值大于3。如果index=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

但不能让它工作


Tags: 数据dfdateindexshift标志条件flag
1条回答
网友
1楼 · 发布于 2024-05-15 05:24:24

假设您的DATE列是datetime对象,一行:

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

相关问题 更多 >

    热门问题