【问题标题】:Fill up column based on condition goes wrong根据条件填写列出错
【发布时间】:2022-12-05 21:34:17
【问题描述】:

我正在尝试根据条件填写一列,但出了点问题。

所以我期待如果不是 2017 年应该不会。

但是 2019 年和 2020 年也充满了肯定。

有谁知道出了什么问题?

``
dfV['is_vacation'] = np.where((dfV['year'] == 2017) & 
                             (dfV['week_nr'] ==  26) & (dfV['week_nr'] ==  27) & (dfV['week_nr'] ==  28)
                              & (dfV['week_nr'] ==  29) & (dfV['week_nr'] == 30) &
                              (dfV['week_nr'] ==  31) & (dfV['week_nr'] ==  32) & (dfV['week_nr'] ==  33) & (dfV['week_nr'] ==  34)
                              & (dfV['week_nr'] ==  35) & (dfV['week_nr'] ==  42) & (dfV['week_nr'] ==  43) & (dfV['week_nr'] ==  44), 'Yes', 'No')
``
``
 

【问题讨论】:

  • 您是说 (dfV['week_nr'] == 26) | (dfV['week_nr'] == 27) | ...(即按位或者代替)?因为一个单元格不能同时等于 27 和 28,所以条件永远不会是 True。更好的是,我建议您使用.isin 和/或.between

标签: python pandas numpy


【解决方案1】:

使用 Series.between 代替 & 用于按位 AND

dfV['is_vacation'] = np.where((dfV['year'] == 2017) & 
                               ~dfV['week_nr'].between(26, 44), 'Yes', 'No')

或者:

dfV['is_vacation'] = np.where((dfV['year'] == 2017) & 
                               ~dfV['week_nr'].isin(range(26, 45)), 'Yes', 'No')

【讨论】:

  • 是的,但看起来 OP 想要排除 36..41。
  • 我会试试看……但我不想将第 39 周算作休假周
  • @afbz - 所以需要 Yes 如果 year==2017 而不是 between(26, 44)
猜你喜欢
  • 2021-09-05
  • 1970-01-01
  • 1970-01-01
  • 2021-09-30
  • 2023-03-08
  • 2019-05-04
  • 1970-01-01
  • 2016-04-06
  • 2020-01-06
相关资源
最近更新 更多