Чтобы перебрать все совпадения, вы можете использовать функцию replace
:
var re = /\s*([^[:]+):\"([^"]+)"/g;
var s = '[description:"aoeu" uuid:"123sth"]';
s.replace(re, function(match, g1, g2) { console.log(g1, g2); });
Решение периода месяца:
Сначала преобразуйте столбцы 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