背景
我有一个数据框 df。它有客户的 order_dates(交易何时完成等)。我正在尝试创建一个新列“最近”,如果交易是最近的(从今天起 1 个月内),则为 1;如果不是最近的交易,则为 0。
例如
当前 df
order_date
2019-01-01
2019-12-14
2019-10-12
2019-11-22
需要输出 df
order_date recent
2019-01-01 0
2019-12-14 1
2019-10-12 0
2019-11-22 0
2019-12-09 1
代码:
import datetime
df['recent'] = 9
df['order_date'] = pd.to_datetime(df['order_date']).dt.date
if ((df['order_date']) >(datetime.date.today() - datetime.timedelta(1*365/12))).any():
df['recent'] == 1
else:
df['recent'] == 0
我为最近写入了默认值 9,因为 if else 不起作用,现在我在 df['recent'] 中获取所有 9 个值
一些基本背景:
[IN]:print(df['order_date'].loc[0])
2019-01-01
[IN]:type(df['order_date'])
pandas.core.series.Series
[IN]:print(datetime.date.today() - datetime.timedelta(1*365/12))
2019-12-01
[IN]:type(datetime.date.today() - datetime.timedelta(1*365/12))
datetime.date
最佳答案
通过 Series.astype
将 bool 掩码转换为整数:
df['order_date'] = pd.to_datetime(df['order_date']).dt.date
#solution for oldier pandas versions
#df['order_date'] = pd.to_datetime(df['order_date']).dt.floor('d')
m = (df['order_date']) >(datetime.date.today() - datetime.timedelta(1*365/12))
df['recent'] = m.astype(int)
或者通过 numpy.where
设置值:
df['recent'] = np.where(m, 1, 0)
关于python - 如果否则无法在 python Pandas 中使用日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59543774/