0
点赞
收藏
分享

微信扫一扫

mask where apply 逻辑判断区别


1 pd.mask

逻辑判断只能用&|而不能用and,or

df = obj.df_投料[['数量', '入库重量']].reset_index(drop=True)
df['领料为零'] = df.数量.mask(
    df.数量.isna() | (df.数量.round(0) == 0),
    df.入库重量
)
df1 = df.copy()

2 np.where

逻辑判断只能用&|而不能用and,or

df = obj.df_投料[['数量', '入库重量']].reset_index(drop=True)
df['领料为零'] = np.where(
    df.数量.isna() | (df.数量.round(0) == 0),
    df.入库重量,
    df.数量
)
df2 = df.copy()

3 pd.apply

逻辑判断推荐用and,or

遍历每行的某列的值,是否为缺失值 np.isnan

用row替代df

df = obj.df_投料[['数量', '入库重量']].reset_index(drop=True)
df['领料为零'] = df.apply(
    func=lambda row: row.入库重量
    if np.isnan(row.数量) or (row.数量.round(0) == 0)
    else row.数量,
    axis=1
)
df3 = df.copy()

结果

df1.equals(df2), df1.equals(df3)  # (True, True)

其他结论

避免警告 reset_index

参考

https://blog.51cto.com/u_16055028/7108454

https://blog.51cto.com/u_16055028/6229971

有时候判断结果是None, 需改为逻辑判断!=False

https://blog.51cto.com/u_16055028/6413112

举报

相关推荐

0 条评论