Python 每天在两列之间向dataframe添加行

Python 每天在两列之间向dataframe添加行,python,pandas,dataframe,Python,Pandas,Dataframe,我需要知道按房间类型划分的预订数量。 我有一个数据框,其中包含每个预订的开始和结束及其房间类型: date_from date_to room_type 0 2017-08-07 2017-08-12 SUI 1 2017-08-09 2017-08-11 TWN 2 2017-08-09 2017-08-11 QUA 3 2017-08-07 2017-08-11 QUA 4 2017-08-09 2017-08-11 QUA 5

我需要知道按房间类型划分的预订数量。 我有一个数据框,其中包含每个预订的开始和结束及其房间类型:

    date_from   date_to     room_type
0   2017-08-07  2017-08-12  SUI
1   2017-08-09  2017-08-11  TWN
2   2017-08-09  2017-08-11  QUA
3   2017-08-07  2017-08-11  QUA
4   2017-08-09  2017-08-11  QUA
5   2017-08-09  2017-08-11  QUA
6   2017-08-09  2017-08-11  DBL
7   2017-08-08  2017-08-11  FAM
8   2017-08-08  2017-08-16  INDP
9   2017-08-09  2017-08-11  QUA
我需要这样的东西:

    stay_date  room_type
0   2017-08-07 SUI
1   2017-08-08 SUI
2   2017-08-09 SUI
3   2017-08-10 SUI
4   2017-08-11 SUI
5   2017-08-09 TWN
5   2017-08-10 TWN
...
df = df.pivot_table(
    values=['room_type'],
    index='stay_date',
    aggfunc=len
)
因此,我可以创建如下透视表:

    stay_date  room_type
0   2017-08-07 SUI
1   2017-08-08 SUI
2   2017-08-09 SUI
3   2017-08-10 SUI
4   2017-08-11 SUI
5   2017-08-09 TWN
5   2017-08-10 TWN
...
df = df.pivot_table(
    values=['room_type'],
    index='stay_date',
    aggfunc=len
)
然后像这样返回:

room_type__code DBL FAM SUI TRP TWIN
stay_date                   
2017-07-01      61  20  9   19  39
2017-07-02      49  10  7   11  28
2017-07-03      61  14  4   14  40
2017-07-04      65  13  2   11  37
2017-07-05      66  17  2   11  38
使用与频率
D
with创建新的扩展
DataFrame

#convert to datetime if necessary 
df['date_from'] = pd.to_datetime(df['date_from'])
#remove one day from to date
df['date_to'] = pd.to_datetime(df['date_to']) - pd.Timedelta(1, unit='d')


df1 = pd.concat([pd.Series(r.room_type, 
                           pd.date_range(r.date_from, r.date_to, freq='D')) 
                           for r in df.itertuples()]) \
        .reset_index()
df1.columns = ['stay_date','room_type']
print (df1)
    stay_date room_type
0  2017-08-07       SUI
1  2017-08-08       SUI
2  2017-08-09       SUI
3  2017-08-10       SUI
4  2017-08-11       SUI
5  2017-08-09       TWN
6  2017-08-10       TWN
7  2017-08-09       QUA
8  2017-08-10       QUA
9  2017-08-07       QUA
10 2017-08-08       QUA
11 2017-08-09       QUA
12 2017-08-10       QUA
13 2017-08-09       QUA
...
...
使用与频率
D
with创建新的扩展
DataFrame

#convert to datetime if necessary 
df['date_from'] = pd.to_datetime(df['date_from'])
#remove one day from to date
df['date_to'] = pd.to_datetime(df['date_to']) - pd.Timedelta(1, unit='d')


df1 = pd.concat([pd.Series(r.room_type, 
                           pd.date_range(r.date_from, r.date_to, freq='D')) 
                           for r in df.itertuples()]) \
        .reset_index()
df1.columns = ['stay_date','room_type']
print (df1)
    stay_date room_type
0  2017-08-07       SUI
1  2017-08-08       SUI
2  2017-08-09       SUI
3  2017-08-10       SUI
4  2017-08-11       SUI
5  2017-08-09       TWN
6  2017-08-10       TWN
7  2017-08-09       QUA
8  2017-08-10       QUA
9  2017-08-07       QUA
10 2017-08-08       QUA
11 2017-08-09       QUA
12 2017-08-10       QUA
13 2017-08-09       QUA
...
...