mask where apply 逻辑判断区别
  X5zJxoD00Cah 2023年11月02日 38 0


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

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

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

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

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  X5zJxoD00Cah   2023年11月02日   56   0   0 缺失值
X5zJxoD00Cah