如何使用一个月内的日期范围提取特征?

时间:2018-10-19 08:26:46

标签: python python-3.x pandas feature-extraction

我想从datetime列中提取某天/日期的要素,例如在1到10天之间,输出存储在一个名为

的列下
  

early_month   否则为1或0。

我先前发布的以下问题为我提供了使用indexer_between_time的解决方案,以便使用时间范围。

How to extract features using time range?

我正在使用以下代码从日期中提取每月的某天。

df["date_of_month"] = df["purchase_date"].dt.day

谢谢。

3 个答案:

答案 0 :(得分:2)

您的问题尚不清楚,但是如果您试图创建一个包含1(如果日期介于1到10之间)或1(否则为0)的列,则非常简单:

df['early_month'] = df['date_of_month'].apply(lambda x: 1 if x <= 10 else 0)

df['mid_month'] = df['date_of_month'].apply(lambda x: 1 if x >= 11 and x <= 20 else 0)

作为python初学者,如果您希望避免使用lambda函数,则可以通过创建一个函数然后按如下方式应用它来实现相同的结果:

def create_date_features(day, min_day, max_day):
    if day >= min_day and day <= max_day:
        return 1
    else:
        return 0

df['early_month'] = df['date_of_month'].apply(create_date_features, min_day=1, max_day=10)
df['mid_month'] = df['date_of_month'].apply(create_date_features, min_day=11, max_day=20)

答案 1 :(得分:0)

我相信您需要将布尔掩码转换为整数-True类似于1的过程:

rng = pd.date_range('2017-04-03', periods=10, freq='17D')
df = pd.DataFrame({'purchase_date': rng, 'a': range(10)})  

m2 = df["purchase_date"].dt.day <= 10

df['early_month'] = m2.astype(int)
print (df)
  purchase_date  a  early_month
0    2017-04-03  0            1
1    2017-04-20  1            0
2    2017-05-07  2            1
3    2017-05-24  3            0
4    2017-06-10  4            1
5    2017-06-27  5            0
6    2017-07-14  6            0
7    2017-07-31  7            0
8    2017-08-17  8            0
9    2017-09-03  9            1

详细信息:

print (df["purchase_date"].dt.day <= 10)
0     True
1    False
2     True
3    False
4     True
5    False
6    False
7    False
8    False
9     True
Name: purchase_date, dtype: bool

答案 2 :(得分:0)

也许您需要这个:

import pandas as pd
from datetime import datetime
df = pd.DataFrame({'a':[1,2,3,4,5], 'time':['11.07.2018','12.07.2018','13.07.2018','14.07.2018','15.07.2018']})
df.time = pd.to_datetime(df.time, format='%d.%m.%Y')

df[df.time>datetime(2018,7,13)] #if you need filter for date
df[df.time>datetime(2018,7,13).day] #if you need filter for day