Python如果条件1、2和3有效,则替换为0,否则如果无效,则替换为其他变量

Python如果条件1、2和3有效,则替换为0,否则如果无效,则替换为其他变量,python,pandas,numpy,Python,Pandas,Numpy,我有一个包含3个变量的数据集:1个日期变量(yyyy-mm-dd)、1个数字变量和1个布尔变量(真/假) 我想要应用的条件是,如果月=12,日=24(圣诞节也是如此),布尔值=True,那么我想要数值=0。否则,我想成为它的样子 我见过许多类似的问题,但没有一个希望在条件不适用的情况下数值变量是相同的。如果您向我们展示一些代码会有所帮助,但您的意思是这样的吗 if month == 12 and day == 24 and Boolean == True: numeric = 0 els

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

我想要应用的条件是,如果月=12,日=24(圣诞节也是如此),布尔值=True,那么我想要数值=0。否则,我想成为它的样子


我见过许多类似的问题,但没有一个希望在条件不适用的情况下数值变量是相同的。

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

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

如果你给我们看一些代码会有帮助,但你是说像这样的东西吗

if month == 12 and day == 24 and Boolean == True:
    numeric = 0
else:
    pass
我假设您有一个包含一些数据的pandas
DataFrame
,如下所示:

df=pd.DataFrame(数据=['2018-12-24',1,真],
['2018-12-25',2,假],
[2019-12-24',3,正确],
[2019-12-25',4,假],
[2020-12-24',5,假],
['2020-12-25',6,False]],列=['d','n','b'])
df['d']=pd.to_datetime(df['d'])
i、 e.
打印(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
…现在
打印(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
我假设您有一个包含一些数据的pandas
DataFrame
,如下所示:

df=pd.DataFrame(数据=['2018-12-24',1,真],
['2018-12-25',2,假],
[2019-12-24',3,正确],
[2019-12-25',4,假],
[2020-12-24',5,假],
['2020-12-25',6,False]],列=['d','n','b'])
df['d']=pd.to_datetime(df['d'])
i、 e.
打印(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
…现在
打印(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['Boolean']='TRUE'),(df['Date'].dt.day==24)和(df['Date'].dt.month==12)]值=[0,df['Numeric']]df['Numeric']=np。select(条件,值)Pass只是一个占位符语句,它什么都不做。您可以完全删除语句的“else”部分,但我认为最好让它实际表明,如果上述语句不正确,您不想做任何事情。导致此错误。。。ValueError:序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()。好吧,那么“pass”等同于“让数字保持现状”?我已经尝试过这个方法,但它没有奏效:好吧,那么“pass”等同于“让数字保持现状”?我已经试过了,代码可以工作,但是我的数据不是我想要的:条件=[(df['Boolean']='TRUE'),(df['Date'].dt.day==24)和(df['Date'].dt.month==12)]值=[0,df['Numeric']]df['Numeric']=np。select(条件,值)Pass只是一个占位符语句,它什么都不做。您可以完全删除语句的“else”部分,但我认为最好让它实际表明,如果上述语句不正确,您不想做任何事情。导致此错误。。。ValueError:序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()。查看
np.where
。当提出问题时,最好提供示例输入数据、预期输出和您尝试过的内容。请参见查看
np.where
。当提出问题时,最好提供示例输入数据、预期输出和您尝试过的内容。看,你的例子是有效的,这是我所拥有的,但它对我的数据不起作用!奇怪的是,让我试着重新启动内核,也许它也会对我起作用。谢谢提示:请特别注意上面的括号!(即在重要的命令
df.loc[(…)&(…)&(…)&(…),'n']=0
)中,我的布尔值实际上是一个分类二进制变量,当我将其改回布尔值时,它就起作用了。谢谢你的例子行得通,这就是我所拥有的,但它对我的数据不起作用!奇怪的是,让我试着重新启动内核,也许它也会对我起作用。谢谢提示:请特别注意上面的括号!(即在重要的命令
df.loc[(…)&(…)&(…)&(…),'n']=0
)中,我的布尔值实际上是一个分类二进制变量,当我将其改回布尔值时,它就起作用了。谢谢