Преобразовать столбец отметки времени эпохи в первый день месяца эпохи - PullRequest
0 голосов
/ 29 октября 2018

У меня есть столбец отметки времени эпохи, как указано ниже. Мне нужно преобразовать этот столбец отметки времени эпохи в первый день месяца, а выходные данные также должны быть в эпоху.

time_stamp
1528974011
1530867602
1530867602
1530867604
1530867602
1528974012
1528974011

Пример: первое значение в вышеприведенном столбце 1530867602 соответствует 14/06/2018 11:00:11 в формате даты и времени. Теперь первый день месяца для этой же даты - 01/06/2018, который я хочу в формате эпохи.

Этого также можно добиться, выполнив следующие шаги:

epoch->datetime->first_day_of_the_month->epoch_first_day_of_the_month

но есть ли лучший способ сделать то же самое?

Заранее спасибо!

Пожалуйста, укажите, есть ли какие-либо вопросы / ресурсы по этому вопросу

1 Ответ

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

Использование:

#convert to datetimes
df['time_stamp'] = pd.to_datetime(df['time_stamp'], unit='s')

#first day of month
df = df.resample('MS', on='time_stamp').first()
print (df)
                    time_stamp
time_stamp                    
2018-06-01 2018-06-14 11:00:11
2018-07-01 2018-07-06 09:00:02

print (df['time_stamp'].index.floor('d'))
DatetimeIndex(['2018-06-01', '2018-07-01'], 
               dtype='datetime64[ns]', name='time_stamp', freq=None)

#remove times and convert to epoch
out = (df['time_stamp'].index.floor('d').astype(np.int64) // 10**9)
print (out)
Int64Index([1527811200, 1530403200], dtype='int64', name='time_stamp')

Другим решением является преобразование столбца в период месяца, затем в первый день месяца:

df['time_stamp'] = (pd.to_datetime(df['time_stamp'], unit='s')
                      .dt.to_period('M')
                      .dt.to_timestamp())

Затем удалите дубликаты и конвертируйте в эпоху:

df = df.drop_duplicates('time_stamp').astype(np.int64) // 10**9
print (df)

   time_stamp
0  1527811200
1  1530403200
...