<p>我想不出任何直接的解决办法。您可以使用以下代码段</p>
<pre><code>import pandas as pd
df = pd.DataFrame([{'Product_id': 1, 'month': '01-2018', 'sales': 25},
{'Product_id': 1, 'month': '02-2018', 'sales': 34},
{'Product_id': 1, 'month': '03-2018', 'sales': 29},
{'Product_id': 1, 'month': '04-2018', 'sales': 45},
{'Product_id': 2, 'month': '02-2018', 'sales': 3},
{'Product_id': 2, 'month': '04-2018', 'sales': 2}])
# Maintaining separate columns for month and year. Just easy to groupby.
# You can also convert 'month' column to date object
df[['month_no','year']] = df.month.str.split('-', expand=True)
df['month_no'] = df['month_no'].astype(int)
df['year'] = df['year'].astype(int)
unique_product_ids = df['Product_id'].unique()
unique_years = df['year'].unique()
grpby_df = df.groupby(by=['Product_id','year'])
for unique_product_id in unique_product_ids:
for unique_year in unique_years:
try:
subset_df = grpby_df.get_group((unique_product_id, unique_year))
except KeyError:
continue
start_month = min(subset_df['month_no'])
end_month = 12 # Assuming sales=0 for all subsequent months
months_list = list(subset_df['month_no'])
for i in range(start_month, end_month +1):
if i not in months_list:
df = df.append(
{
'Product_id': unique_product_id,
'month_no': i,
'year': unique_year,
'sales': 0
},
ignore_index = True)
</code></pre>
<p>结果将得到总共23行。产品1为12,产品2为11(因为我们忽略了第一个月)</p>