панды | распространять значения для всех дат

99
14

У меня есть данные в этом формате:

key1 key2 from_date to_date value

Я хочу преобразовать это в этот формат:

key1 key2 date value

где столбец даты должен содержать одно и то же "значение" для всей даты между from_date и to_date.

Каков наилучший способ сделать это в пандах?

спросил(а) 2017-02-21T17:01:00+03:00 3 года, 7 месяцев назад
1
Решение
105

Вы можете использовать:

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

ответил(а) 2017-02-21T17:48:00+03:00 3 года, 7 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема