私は次のようなDataFrameを持っています:
product units_sold week
sku 5 W01
sku 3 W02
sku 2 W03
sku 4 W04
sku 6 W05
sku 5 W36
sku 3 W38
sku 2 W39
sku 4 W40
'週'では、w37が欠落しており、列の順序が間違っています。
必要なすべての行と正しい順序のリストがあります。
week_list = ['W36','W37','W38','W39','W40','W01','W02','W03','W04','W05']
必要な出力は次のとおりです。
product units_sold week
sku 5 W36
sku 0 W37
sku 5 W38
sku 2 W39
sku 4 W40
sku 6 W01
sku 3 W02
sku 2 W03
sku 4 W04
sku 6 W05
W37が配置され、「unit_sold」が0の場合
私はかなり大きなDataFrameを持っており、おそらく他の行が欠落している可能性があるため、1列のソリューションを追加するだけでは適していません。
pd.sort_valuesとpd.categoricalで試してみました:
def sorter(column):
reorder = week_list
cat = pd.Categorical(column, categories=reorder, ordered=True)
return pd.Series(cat)
df.sort_values(by="week", key=sorter)
これは正しいシーケンスを設定するのに役立ちましたが、「w37」がまだ欠落しているため、問題は解決されません。
このリストに基づいてDataFrame行の値を更新する方法はありますか?
IIUCは使用するだけreindex
です:
print (df.set_index("week").reindex(week_list).fillna({"product":"sku", "units_sold": 0}))
product units_sold
week
W36 sku 5.0
W37 sku 0.0
W38 sku 3.0
W39 sku 2.0
W40 sku 4.0
W01 sku 5.0
W02 sku 3.0
W03 sku 2.0
W04 sku 4.0
W05 sku 6.0
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加