Как извлечь функции, используя диапазон дат в течение месяца? - PullRequest
0 голосов
/ 19 октября 2018

Я хотел бы извлечь объекты из столбца datetime для дня / даты, например, между 1 и 10 днями, выходные данные сохраняются в столбце с именем

early_month как 1 или 0 в противном случае.

Следующий вопрос, который я разместил ранее, дал мне решение использовать indexer_between_time для использования временных диапазонов.

Как извлечь объекты с использованием временного диапазона?

Я использую следующий код для извлечения дней месяца из даты.

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

Спасибо.

Ответы [ 3 ]

0 голосов
/ 19 октября 2018

Это не ясно из вашего вопроса, но если вы пытаетесь создать столбец, который содержит 1, если день находится между 1 и 10, или 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)

Какначинающий питон, если вы предпочитаете избегать лямбда-функций, вы можете достичь того же результата, создав функцию и применив ее следующим образом:

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)
0 голосов
/ 19 октября 2018

Может быть, вам нужен этот:

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
0 голосов
/ 19 октября 2018

Полагаю, вам нужно преобразовать логическую маску в целые числа - True s - это процессы типа 1 s:

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

Detail:

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
...