繁体   English   中英

根据列表值更新 Pandas Dataframe 中的行

[英]Update rows in Pandas Dataframe based on the list values

我有一个如下所示的 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,并且可能还有其他缺失的行。

我尝试使用 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM