我有一个数据框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。相同当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
但是无法使其正常工作。
答案 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