Если столбец date
начинается с первого дня месяца для каждого магазина, вы можете сделать .pivot_table()
, а затем повторить выборку с .ffill()
:
df = pd.DataFrame({'date': ['2019-01-01','2019-01-01','2019-01-01','2019-02-01','2019-02-01','2019-02-01',
'2019-03-01','2019-03-01','2019-03-01'],
'Company': ['Store A', 'Store B', 'Store C', 'Store A', 'Store B', 'Store C',
'Store A', 'Store B', 'Store C'],
'Monthly Revenue': [200, 800, 400, 400, 300, 600, 400, 400, 900]})
df['date'] = pd.to_datetime(df['date'])
df = pd.DataFrame(pd.concat([df['date'], df['date'] + pd.tseries.offsets.MonthEnd(1)]), columns=['date']).combine_first(df)
df = df.pivot_table(index='date', columns='Company').resample('D').ffill().reset_index()
print(df)
Отпечатки:
date Monthly Revenue
Company Store A Store B Store C
0 2019-01-01 200.0 800.0 400.0
1 2019-01-02 200.0 800.0 400.0
2 2019-01-03 200.0 800.0 400.0
3 2019-01-04 200.0 800.0 400.0
4 2019-01-05 200.0 800.0 400.0
.. ... ... ... ...
85 2019-03-27 400.0 400.0 900.0
86 2019-03-28 400.0 400.0 900.0
87 2019-03-29 400.0 400.0 900.0
88 2019-03-30 400.0 400.0 900.0
89 2019-03-31 400.0 400.0 900.0
[90 rows x 4 columns]
Если вам нужно это в один ряд, вы можете сделать дополнительно:
df = df.melt(id_vars='date')
print(df[['date', 'Company', 'value']])
Это напечатает:
date Company value
0 2019-01-01 Store A 200.0
1 2019-01-02 Store A 200.0
2 2019-01-03 Store A 200.0
3 2019-01-04 Store A 200.0
4 2019-01-05 Store A 200.0
.. ... ... ...
265 2019-03-27 Store C 900.0
266 2019-03-28 Store C 900.0
267 2019-03-29 Store C 900.0
268 2019-03-30 Store C 900.0
269 2019-03-31 Store C 900.0
[270 rows x 3 columns]