我有因子和时间间隔表。我想做的是获取长表,每个日期的间隔在START_DATE
和END_DATE
之间。
dt_in = pd.DataFrame({'factor':['A','B'],
'START_DATE':[pd.Timestamp('2015-01-01'),pd.Timestamp('2016-02-05')],
'END_DATE':[pd.Timestamp('2015-01-04'),pd.Timestamp('2016-02-07')]})
END_DATE START_DATE factor
0 2015-01-04 2015-01-01 A
1 2016-02-07 2016-02-05 B
我想要具有这样的输出表:
dt_out = pd.DataFrame({'factor': ['A','A','A','A','B','B','B'],
'DATE': ['2015-01-01', '2015-01-02', '2015-01-03', '2015-01-04',
'2016-02-05', '2016-02-06', '2016-02-07']})
DATE factor
0 2015-01-01 A
1 2015-01-02 A
2 2015-01-03 A
3 2015-01-04 A
4 2016-02-05 B
5 2016-02-06 B
6 2016-02-07 B
我怎样才能做到这一点?
最佳答案
您可以使用melt
进行重塑,然后使用groupby
的resample
填充dates
:
df = pd.melt(dt_in, id_vars='factor', value_name='DATE')
.set_index('DATE')
.drop('variable',axis=1)
print (df)
factor
DATE
2015-01-04 A
2016-02-07 B
2015-01-01 A
2016-02-05 B
print (df.groupby('factor')
.resample('1D')
.ffill()
.reset_index(drop=True, level=0)
.reset_index())
DATE factor
0 2015-01-01 A
1 2015-01-02 A
2 2015-01-03 A
3 2015-01-04 A
4 2016-02-05 B
5 2016-02-06 B
6 2016-02-07 B
注意:
此功能是pandas 0.18.1中的新增功能。
关于python - Pandas 重塑日期序列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38895121/