Создание временных меток в серии pandas, начиная с другой заданной временной метки

Чтобы перебрать все совпадения, вы можете использовать функцию replace:

var re = /\s*([^[:]+):\"([^"]+)"/g;
var s = '[description:"aoeu" uuid:"123sth"]';

s.replace(re, function(match, g1, g2) { console.log(g1, g2); });
2
задан ytu 13 July 2018 в 10:09
поделиться

1 ответ

Решение периода месяца:

Сначала преобразуйте столбцы to_period из months, а также получите Period из now, а затем используйте itertuples с period_range , последний для datetimes использует to_timestamp :

df['a'] = df['on_pm_at'].dt.to_period('m')
now = pd.Period(pd.datetime.now().strftime('%Y-%m'),freq='m')
print (now)
2018-07

df1 = pd.concat([pd.Series(r.user_id,pd.period_range(r.a, now, freq='m')) 
                 for r in df.itertuples()]).reset_index()
df1.columns = ['months','user_id']
df1['months'] = df1['months'].dt.to_timestamp('m')
print (df1)
      months  user_id
0 2018-06-30     2124
1 2018-07-31     2124
2 2018-02-28    18420
3 2018-03-31    18420
4 2018-04-30    18420
5 2018-05-31    18420
6 2018-06-30    18420
7 2018-07-31    18420

Решение Datetime:

Аналогичный подход для последнего дня месяца преобразуется в month period, а затем в timestamp s и использует date_range :

df['a'] = df['on_pm_at'].dt.to_period('m').dt.to_timestamp('m')
now = pd.Timestamp(pd.datetime.now()).to_period('m').to_timestamp('m')
2018-07-31 00:00:00

df1 = pd.concat([pd.Series(r.user_id,pd.date_range(r.a, now, freq='m')) 
                 for r in df.itertuples()]).reset_index()
df1.columns = ['months','user_id']
print (df1)
      months  user_id
0 2018-06-30     2124
1 2018-07-31     2124
2 2018-02-28    18420
3 2018-03-31    18420
4 2018-04-30    18420
5 2018-05-31    18420
6 2018-06-30    18420
7 2018-07-31    18420
2
ответ дан jezrael 17 August 2018 в 13:11
поделиться
  • 1
    @unutbu - Спасибо за комментарий, я не знаю. – jezrael 13 July 2018 в 12:03
Другие вопросы по тегам:

Похожие вопросы: