Использование numpy.repeat()
:
m= pd.DataFrame(np.repeat(df.values,df.length_of_stay,axis=0),columns=df.columns)
m['date']=m.groupby('hotel_id')['date'].transform(lambda x: pd.date_range(start=x.iloc[0], periods=len(x)))
или:
newdf = pd.DataFrame(np.repeat(df.values,df.length_of_stay,axis=0),columns=df.columns)
newdf['date'] = [i for day, n in zip(df.date,df.length_of_stay)
for i in pd.date_range(start=day, periods=n)]
Полный пример:
import pandas as pd
import numpy as np
data = '''\
hotel_id date length_of_stay clicks
A 2019-01-01 3 7
B 2019-01-06 2 11
C 2019-01-03 1 4'''
fileobj = pd.compat.StringIO(data)
df = pd.read_csv(fileobj, parse_dates=['date'], sep='\s+')
m= pd.DataFrame(np.repeat(df.values,df.length_of_stay,axis=0),columns=df.columns)
m['date']=m.groupby('hotel_id')['date'].transform(lambda x: pd.date_range(start=x.iloc[0], periods=len(x)))
print(m)
hotel_id date length_of_stay clicks
0 A 2019-01-01 3 7
1 A 2019-01-02 3 7
2 A 2019-01-03 3 7
3 B 2019-01-06 2 11
4 B 2019-01-07 2 11
5 C 2019-01-03 1 4