使用窗格数据填充数据框

use*_*698 1 python indexing python-3.x pandas

我有这样的数据帧.

import pandas as pd
df = pd.DataFrame({'User':['A','A','A','A','B', 'B'], 
                   'Month':['2017-01-01','2017-03-01','2017-05-01','2017-09-01','2017-01-01','2017-05-01'],
                    'count':[2,2,2,2,5,5]})
Run Code Online (Sandbox Code Playgroud)

我想填充数据,使它看起来像这样

df = pd.DataFrame({'User':['A','A','A','A','A','A','A','A','A','A','A','A','B','B','B','B','B','B','B','B','B','B','B','B'],
               'Month':['2017-01-01','2017-02-01','2017-03-01','2017-04-01','2017-05-01','2017-06-01','2017-07-01','2017-08-01','2017-09-01','2017-10-01','2017-11-01','2017-12-01','2017-01-01','2017-02-01','2017-03-01','2017-04-01','2017-05-01','2017-06-01','2017-07-01','2017-08-01','2017-09-01','2017-10-01','2017-11-01','2017-12-01'], 
               'count':[2,0,2,0,2,0,0,0,2,0,0,0,5,0,0,0,5,0,0,0,0,0,0,0]})
Run Code Online (Sandbox Code Playgroud)

piR*_*red 5

mux = pd.MultiIndex.from_product([
    df.User.unique(),
    pd.date_range('2017-01-01', periods=12, freq='MS')
], names=['User', 'Month'])

df.set_index(['User', 'Month']).reindex(mux, fill_value=0) \
  .swaplevel(0, 1).reset_index()

        Month User  count
0  2017-01-01    A      2
1  2017-02-01    A      0
2  2017-03-01    A      2
3  2017-04-01    A      0
4  2017-05-01    A      2
5  2017-06-01    A      0
6  2017-07-01    A      0
7  2017-08-01    A      0
8  2017-09-01    A      2
9  2017-10-01    A      0
10 2017-11-01    A      0
11 2017-12-01    A      0
12 2017-01-01    B      5
13 2017-02-01    B      0
14 2017-03-01    B      0
15 2017-04-01    B      0
16 2017-05-01    B      5
17 2017-06-01    B      0
18 2017-07-01    B      0
19 2017-08-01    B      0
20 2017-09-01    B      0
21 2017-10-01    B      0
22 2017-11-01    B      0
23 2017-12-01    B      0
Run Code Online (Sandbox Code Playgroud)