我有一个包含因子和时间间隔的表。我想做的是得到一个长表,每个日期的间隔在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中是新的。