【问题标题】:Python IF conditions 1, 2, and 3 are valid THEN replace with 0, ELSE if not valid replace with other variablePython IF 条件 1、2 和 3 有效 THEN 替换为 0,ELSE 如果无效则替换为其他变量
【发布时间】:2020-07-28 23:02:15
【问题描述】:

我有一个包含 3 个变量的数据集:1 个日期变量 (yyyy-mm-dd)、1 个数字变量和 1 个布尔变量 (true/false)

我要应用的条件是 IF 月份 = 12 和天 = 24(所以圣诞节)和布尔值 = True,那么我希望 Numeric = 0。否则,我希望 Numeric 是原来的样子。

我见过很多类似的问题,但他们都不希望数值变量相同,以防条件不适用。

【问题讨论】:

标签: python pandas numpy


【解决方案1】:

假设你有一个带有一些数据的 pandas DataFrame,如下所示:

df = pd.DataFrame(data=[['2018-12-24',1,True],
                        ['2018-12-25',2,False],
                        ['2019-12-24',3,True],
                        ['2019-12-25',4,False],
                        ['2020-12-24',5,False],
                        ['2020-12-25',6,False]], columns=['d','n','b'])
df['d'] = pd.to_datetime(df['d'])

print(df) 会输出:

     d        n    b
0 2018-12-24  1   True
1 2018-12-25  2  False
2 2019-12-24  3   True
3 2019-12-25  4  False
4 2020-12-24  5  False
5 2020-12-25  6  False

如果确实如此,那么考虑用0简单地覆盖一些条目

df.loc[(df['d'].dt.day == 24) & (df['d'].dt.month == 12) & df['b'], 'n'] = 0

...现在print(df) 输出:

     d        n    b
0 2018-12-24  0   True
1 2018-12-25  2  False
2 2019-12-24  0   True
3 2019-12-25  4  False
4 2020-12-24  5  False
5 2020-12-25  6  False

【讨论】:

  • 您的示例有效,这就是我所拥有的,但它不适用于我的数据!奇怪,让我尝试重新启动内核,也许它也对我有用。谢谢!
  • 提示:额外注意上面的括号! (即在重要命令df.loc[(...) & (...) & (...), 'n'] = 0
  • 事实证明,我的布尔值实际上是一个分类二进制变量,当我将它改回布尔值时它起作用了。谢谢!
【解决方案2】:

如果您向我们展示一些代码会有所帮助,但您的意思是这样的吗?

if month == 12 and day == 24 and Boolean == True:
    numeric = 0
else:
    pass

【讨论】:

  • 好的,所以“通过”相当于“让数字成为它本来的样子”?
  • 我已经尝试过了,但它没有解决问题:好的,所以“通过”相当于“让数字成为它已经是”?我试过这个,代码有效,但我的数据不是我想要的:conditions = [ (df['Boolean'] == 'TRUE'), (df['Date'].dt.day = = 24) & (df['Date'].dt.month == 12) ] values = [0, df['Numeric']] df['Numeric'] = np.select(conditions, values)
  • Pass 只是一个不做任何事情的占位符语句。您可以完全删除语句的“else”部分,但我认为如果上述语句不正确,最好让它实际表明您不想做任何事情。
  • 导致此错误... ValueError: Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-04
  • 1970-01-01
  • 2023-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多