Решения для уникальных DatetimeIndex
с Country_Code
комбинациями:
Создание MultiIndex
путем добавления Country_Code
к DatetimeIndex
со всеми комбинациями уникальных значений даты и времени с кодами с DataFrame.reindex
:
df = (df.set_index('Country_Code', append=True)
.reindex(pd.MultiIndex.from_product([df.index.unique(), df['Country_Code'].unique()],
names=['Date','Country_Code']), fill_value=0)
.reset_index(level=1))
print (df)
Country_Code Article_ID Sold_Units
Date
2017-01-01 AT 3576 1
2017-01-01 FR 0 0
2017-01-01 FI 0 0
2017-01-01 SE 0 0
2017-01-02 AT 0 0
2017-01-02 FR 1579 1
2017-01-02 FI 332 2
2017-01-02 SE 0 0
2017-01-03 AT 3576 1
2017-01-03 FR 0 0
2017-01-03 FI 0 0
2017-01-03 SE 332 1
Или используйте DataFrame.unstack
с DataFrame.stack
:
df = (df.set_index('Country_Code', append=True)
.unstack(fill_value=0)
.stack()
.reset_index(level=1))
print (df)
Country_Code Article_ID Sold_Units
Date
2017-01-01 AT 3576 1
2017-01-01 FI 0 0
2017-01-01 FR 0 0
2017-01-01 SE 0 0
2017-01-02 AT 0 0
2017-01-02 FI 332 2
2017-01-02 FR 1579 1
2017-01-02 SE 0 0
2017-01-03 AT 3576 1
2017-01-03 FI 0 0
2017-01-03 FR 0 0
2017-01-03 SE 332 1
Решение для нескольких значений вdatetime с кодами стран:
Ошибка означает, что данные похожи на:
print (df)
Article_ID Country_Code Sold_Units
Date
2017-01-01 3576 AT 1
2017-01-02 1579 FI 1 <-FI
2017-01-02 332 FI 2 <-FI
2017-01-03 3576 AT 1
2017-01-03 332 SE 1
df = (df.groupby(['Date','Country_Code'])
.sum()
.unstack(fill_value=0)
.stack()
.reset_index(level=1))
print (df)
Country_Code Article_ID Sold_Units
Date
2017-01-01 AT 3576 1
2017-01-01 FI 0 0
2017-01-01 SE 0 0
2017-01-02 AT 0 0
2017-01-02 FI 1911 3
2017-01-02 SE 0 0
2017-01-03 AT 3576 1
2017-01-03 FI 0 0
2017-01-03 SE 332 1