панды | распространять значения для всех дат
У меня есть данные в этом формате:
key1 key2 from_date to_date value
Я хочу преобразовать это в этот формат:
key1 key2 date value
где столбец даты должен содержать одно и то же "значение" для всей даты между from_date и to_date.
Каков наилучший способ сделать это в пандах?
Вы можете использовать:
concat
Series
созданная date_range
join
столбцы исходного df
по index
print (df)
key1 key2 from_date to_date value
0 a g 2017-01-01 2017-01-05 100
1 r h 2017-02-01 2017-02-03 50
print (df.dtypes)
key1 object
key2 object
from_date datetime64[ns]
to_date datetime64[ns]
value int64
dtype: object
df1 = pd.concat([pd.Series(r.Index,
pd.date_range(r.from_date, r.to_date))
for r in df.itertuples()]).reset_index()
df1.columns = ['date','idx']
print (df1)
date idx
0 2017-01-01 0
1 2017-01-02 0
2 2017-01-03 0
3 2017-01-04 0
4 2017-01-05 0
5 2017-02-01 1
6 2017-02-02 1
7 2017-02-03 1
df2 = df1.set_index('idx').join(df[['key1','key2', 'value']]).reset_index(drop=True)
df2 = df2.reindex(columns=['key1','key2','date', 'value'])
print (df2)
key1 key2 date value
0 a g 2017-01-01 100
1 a g 2017-01-02 100
2 a g 2017-01-03 100
3 a g 2017-01-04 100
4 a g 2017-01-05 100
5 r h 2017-02-01 50
6 r h 2017-02-02 50
7 r h 2017-02-03 50