pandas中any和all在项目中的使用场景

一个机器的运行周期内,内部有两个内机(不会同时运行),判断这个运行周期内,单独只运行某一个内机的情况下,该周期保留,如果该周期内,出现两个内机都有运行的阶段时,或者都没有运行的阶段时,该周期剔除。

构造一组数据说明情况,0表示关机,1表示开机

import pandas as pd

df = pd.DataFrame({
    '内机1': [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    '内机2': [1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]
}, index=pd.date_range(start='2021-08-31 00:00:00', periods=11, freq='min'))

out:
					内机1  内机2
2021-08-31 00:00:00    0    1
2021-08-31 00:01:00    1    0
2021-08-31 00:02:00    0    1
2021-08-31 00:03:00    0    1
2021-08-31 00:04:00    0    1
2021-08-31 00:05:00    0    1
2021-08-31 00:06:00    0    1
2021-08-31 00:07:00    0    1
2021-08-31 00:08:00    0    1
2021-08-31 00:09:00    0    1
2021-08-31 00:10:00    0    1

还未了解到any和all的使用方法时,我是直接判断两列是否都有大于0的情况,代码如下:

# 判断这两个DataFrame对象是否不同时为empty
df[df['内机1'] > 0].empty
df[df['内机2'] > 0].empty

if (df[df['内机1'] > 0].empty or not df[df['内机2'] > 0].empty) or (df[df['内机2'] > 0].empty or not df[df['内机1'] > 0].empty):
# 满足此条件则这个周期保留

判断条件一看挺复杂的,自从有了any和all之后,非常方便

# 拆分三步走

# 第一步,判断元素大于0的情况
df.loc[:,['内机1','内机2']] > 0

out:
					内机1    内机2
2021-08-31 00:00:00  False   True
2021-08-31 00:01:00   True  False
2021-08-31 00:02:00  False   True
2021-08-31 00:03:00  False   True
2021-08-31 00:04:00  False   True
2021-08-31 00:05:00  False   True
2021-08-31 00:06:00  False   True
2021-08-31 00:07:00  False   True
2021-08-31 00:08:00  False   True
2021-08-31 00:09:00  False   True
2021-08-31 00:10:00  False   True

# 第二步,判断每列是否有True的情况
(df.loc[:,['内机1','内机2']] > 0).any()

out:
内机1    True
内机2    True
dtype: bool

# 第三步,判断该Series对象是否都为True,都为True的话,该周期剔除

(df.loc[:,['内机1','内机2']] > 0).any().all()

out:
True

无论是pandas的any和all还是python内置的any和all,都是非常好用的方法,结合应用到不同的场景之中,可以使代码更为的简洁易懂

希望对大家有所帮助,有问题的地方也请大家批评指正,感谢!!

能给个关注就更好了

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

写代码ing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值