Расщепление в пандах даты с отметкой времени - PullRequest
1 голос
/ 03 мая 2019

У меня есть вопрос о проблеме панд:

Итак, у меня есть кадр данных, который выглядит следующим образом:

timestamp     user     exercises
2018-01-01    John         7
2018-01-01    Mary         9
2018-02-01    John         3
2018-02-01    Mary         2
2018-03-01    John         1
2018-03-01    Mary         5
2019-01-01    John         3
2019-01-01    Mary         4
2019-02-01    John         2
2019-02-01    Mary         5
2020-01-01    John         6
2020-01-01    Mary         2
2020-02-01    John         1
2020-02-01    Mary         2

И мне нужно получить выходной фрейм данных, который является подмножеством заданного, но он должен хранить только данные за 2018 год, например:

    timestamp     user     exercises
    2018-01-01    John         7
    2018-01-01    Mary         9
    2018-02-01    John         3
    2018-02-01    Mary         2
    2018-03-01    John         1
    2018-03-01    Mary         5

Любые идеи о том, как я могу получить этот выходной фрейм данных из данного фрейма данных?

Большое спасибо заранее.

Любая помощь будет оценена.

Ответы [ 5 ]

1 голос
/ 03 мая 2019

Попробуйте:

import pandas as pd
import datetime as dt

df = pd.DataFrame({"timestamp": ['2018-01-01',
                                 '2018-01-01',
                                 '2019-01-01',
                                 '2020-01-01'],
                   "user": ['john', 'mary', 'john', 'mary'],
                   'exercises': [7,9,3,2]},)


df['timestamp'] = pd.to_datetime(df['timestamp'])

df[df['timestamp'].dt.year == 2018]

ввод

    timestamp   user    exercises
0   2018-01-01  john    7
1   2018-01-01  mary    9
2   2019-01-01  john    3
3   2020-01-01  mary    2

выход

timestamp   user    exercises
0   2018-01-01  john    7
1   2018-01-01  mary    9
0 голосов
/ 04 мая 2019

Ваш индекс DatetimeIndex?Если это так, вы можете позвонить data.loc["2018"].Внутренне, pandas будет воспринимать «2018» как год 2018, и, поскольку срезы .loc включают в себя оба ребра, выберите все данные в этом году.

0 голосов
/ 03 мая 2019

Если вам нравятся лямбды, вы можете использовать ниже:

, если отметка времени - строка:

df.loc[lambda df: df.timestamp.str[:4] == '2018']

, если отметка времени - дата:

df.loc[lambda df: (pd.to_datetime(df.timestamp)).dt.year == 2018]
0 голосов
/ 03 мая 2019

Используйте Series.dt.year, чтобы выбрать только 2018 год:

# df['timestamp'] = pd.to_datetime(df['timestamp'])

df_new = df[df['timestamp'].dt.year == 2018]

print(df_new)
   timestamp  user  exercises
0 2018-01-01  John          7
1 2018-01-01  Mary          9
2 2018-02-01  John          3
3 2018-02-01  Mary          2
4 2018-03-01  John          1
5 2018-03-01  Mary          5
0 голосов
/ 03 мая 2019
 import pandas as pd

 /* Convert the date column to Datetime format */

 data['DATE'] = pd.to_datetime(data['DATE'])

 /* Create mask for the required condition */

 mask = data['DATE'] <= '31-12-2018'

 /* apply mask to the data */

 data = data.loc[mask]

Попробуйте что-нибудь подобное и дайте мне знать, если это поможет.

...