Python 基于列表值更新Dataframe中的行
我有一个如下所示的数据帧:Python 基于列表值更新Dataframe中的行,python,pandas,sorting,rows,reindex,Python,Pandas,Sorting,Rows,Reindex,我有一个如下所示的数据帧: 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
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']
我有一个包含所有所需行和正确顺序的列表:
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已就位且“已售出单元”为0
只添加一列的解决方案是不合适的,因为我有一个相当大的数据帧,可能还有其他丢失的行
我尝试使用pd.sort_值和pd.category:
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”仍然缺失,因此问题没有得到解决
有什么方法可以基于此列表更新数据帧行值吗?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
如果您执行以下操作会怎么样-1。将周列表保存在数据框中。2.使用此dataframe 3连接您的表。将周列中的null替换为0并按周排序