python - 如果否则无法在 python Pandas 中使用日期时间

标签 python pandas

背景

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

相关文章:

python - PyMongo 返回 float 而不是整数

python - Pandas 切片,列中带有冒号

python - 由于 "perfect separation error",无法运行逻辑回归

python - 如何从没有索引的 Pandas 系列中提取值

python - pandas 在另一列上的 groupby 之后绘制一列的不同值

python - 使用正则表达式分割字符串并包含模式

python - OpenCV2 : grayscaled video displays fine, 但不保存

python - 如何在 Sublime text 2 python 中运行代码

python - 如何查找了解主题或其他方式的 rdf 对象?

python - 在 python 中以有效的方式对每一行应用条件时,如何在数据框中找到最后一个真值索引?