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