以下は、df.head()
日付がインデックスとして設定されたDataSetのです。
Article_ID Country_Code Sold_Units
Date
2017-01-01 3576 AT 1
2017-01-02 1579 FR 1
2017-01-02 332 FI 2
2017-01-03 3576 AT 1
2017-01-03 332 SE 1
国コードには、「AT、FR、FI、SE」の4つの値があります。これらの4つのcountry_codeがそれらの日付に存在しない場合は、すべての日付に追加し、Article_IDとSold_Unitsでそれらの値を0に代入したいと思います。
出力例は基本的に次のようになります。
Article_ID Country_Code Sold_Units
Date
2017-01-01 3576 AT 1
2017-01-01 0 FR 0 # FR FI SE added with 0s.
2017-01-01 0 FI 0
2017-01-01 0 SE 0
2017-01-02 0 AT 0 # AT, SE added
2017-01-02 1579 FR 1
2017-01-02 332 FI 2
2017-01-02 0 SE 0
2017-01-03 3576 AT 1
2017-01-03 0 FR 0 # FR, FI added
2017-01-03 0 FI 0
2017-01-03 332 SE 1
国コードごとにこのようなデフォルト値を追加するにはどうすればよいですか?
以下のためのユニークなソリューション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
国コードを使用した日時ごとの複数の値のソリューション:
エラーは、データが次のようなものであることを意味します。
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
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加