<p>您可以通过<a href="https://pandas.pydata.org/pandas-docs/stable/generated/pandas.MultiIndex.from_product.html" rel="nofollow noreferrer">^{<cd1>}</a>计算笛卡尔积,然后使用平铺数据帧连接:</p>
<pre><code>year = [2018]
month = [1, 2]
# calculate Cartesian product and repeat by number of rows in dataframe
cart_prod = pd.MultiIndex.from_product([year, month], names=['year', 'month'])
# tile dataframe and join year_month index
res = df.loc[np.tile(df.index, len(year) * len(month))]\
.set_index(cart_prod.repeat(df.shape[0])).reset_index()
print(res)
year month speciality_id speciality_name
0 2018 1 1 Acupuncturist
1 2018 1 2 Andrologist
2 2018 1 3 Anaesthesiologist
3 2018 1 4 Audiologist
4 2018 1 5 AyurvedicDoctor
5 2018 1 6 Biochemist
6 2018 1 7 Biophysicist
7 2018 2 1 Acupuncturist
8 2018 2 2 Andrologist
9 2018 2 3 Anaesthesiologist
10 2018 2 4 Audiologist
11 2018 2 5 AyurvedicDoctor
12 2018 2 6 Biochemist
13 2018 2 7 Biophysicist
</code></pre>