はクロス(SQLの考え方を持つこれらの私たちのために)merge
ルートに参加
# ASSIGN KEY COLUMN
df['KEY'] = 1
# CREATE DF OF DATES RANGE
dates = pd.DataFrame({'DATE':list(range(df['DATE'].min(),df['DATE'].max() + 1)),
'COUNT':0, 'KEY':1})
# CROSS JOIN MERGE
mdf = df.merge(dates, on=['KEY'])
# REASSIGN COUNT
mdf.loc[mdf['DATE_x'] != mdf['DATE_y'], 'COUNT_x'] = 0
# CLEAN UP DF (COLS AND ROWS)
mdf = mdf[['DATE_y', 'COUNTRY', 'COUNTRY_ID', 'COUNT_x']]\
.rename(columns={'DATE_y':'DATE', 'COUNT_x':'COUNT'})\
.drop_duplicates(['DATE', 'COUNTRY', 'COUNTRY_ID'])\
.sort_values('DATE')\
.reset_index(drop=True)
# DATE COUNTRY COUNTRY_ID COUNT
# 0 1980 United States 840 42
# 1 1980 Paraguay 600 0
# 2 1980 Czech Republic 203 2
# 3 1980 Hungary 348 1
# 4 1980 Great Britain 826 1
# 5 1980 South Africa 710 1
# 6 1981 United States 840 0
# 7 1981 Czech Republic 203 0
# 8 1981 Hungary 348 0
# 9 1981 Paraguay 600 0
# 10 1981 Great Britain 826 0
# 11 1981 South Africa 710 0
# 12 1982 South Africa 710 0
# 13 1982 Hungary 348 0
# 14 1982 Czech Republic 203 0
# 15 1982 United States 840 0
# 16 1982 Great Britain 826 0
# 17 1982 Paraguay 600 2
も考えてみましょうありがとうございました! – user3562812