基于列表值更新Dataframe中的行

2024-04-27 11:20:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个如下所示的数据帧:

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已就位且“已售出单元”为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”仍然缺失,因此问题没有得到解决

是否有任何方法可以基于此列表更新DataFrame行值


Tags: 数据顺序pdweekskuw03w02w04
1条回答
网友
1楼 · 发布于 2024-04-27 11:20:17

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

相关问题 更多 >