<p>您可以使用<code>reindex()</code>来提取缺少的月份:</p>
<pre><code># create the MultiIndex based on the existing df.index.levels
midx = pd.MultiIndex.from_product(df.index.levels, names=df.index.names)
# run reindex() with the new indexes and then fix Nan `value` column
df1 = df.reindex(midx).fillna({'value':0})
df1
#Out[41]:
# value data_1 data_2 data_3 data_4
#id_1 id_2 effective_date
#ADH10685 CA1P0 2018-07-31 0.000048 17901701.0 3mra Actual 198.00
# 2018-08-31 0.000048 17901701.0 3mra Actual 198.00
# 2018-09-30 0.000000 NaN NaN NaN NaN
# 2018-10-31 0.000000 NaN NaN NaN NaN
# 2018-11-30 0.000000 NaN NaN NaN NaN
# 2018-12-31 0.000000 NaN NaN NaN NaN
# CB0N0 2018-07-31 4.010784 17901701.0 3mra Actual 0.01
# 2018-08-31 2.044298 17901701.0 3mra Actual 0.01
# 2018-09-30 0.000000 NaN NaN NaN NaN
# 2018-10-31 11.493831 17901701.0 3mra Actual 0.01
# 2018-11-30 13.929844 17901701.0 3mra Actual 0.01
# 2018-12-31 21.500490 17901701.0 3mra Actual 0.01
# CB0P0 2018-07-31 22.389493 17901701.0 3mra Actual 0.03
# 2018-08-31 23.600726 17901701.0 3mra Actual 0.03
# 2018-09-30 45.105458 17901701.0 3mra Actual 0.03
# 2018-10-31 32.249056 17901701.0 3mra Actual 0.03
# 2018-11-30 60.790889 17901701.0 3mra Actual 0.03
# 2018-12-31 46.832914 17901701.0 3mra Actual 0.03
# select columns except the 'value' column
cols = df1.columns.difference(['value'])
# update the selected columns with ffill/bfill per groupby on level=[0,1]
df1.loc[:,cols] = df1.loc[:,cols].groupby(level=[0,1]).transform('ffill')
</code></pre>