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

时间:2018-11-01 22:46:38

标签: 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的列,并为每一行获取当前值,然后回顾前一天并比较这些值。如果值相同

  1. 如果当前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。相同当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

但是无法使其正常工作。

1 个答案:

答案 0 :(得分:1)

假设您的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