【问题标题】:Python two condition if elsePython 两个条件 if else
【发布时间】:2018-03-05 15:14:37
【问题描述】:

我有字典形式的代码,我想将其转换为 pandas

df = pd.DataFrame(dict(a=[1.5,2.8,9.3],b=[3.2,3.3,3.9],c=[13.1,4.9,15.9],d=[1.1,1.9,2.9]))

这些数据是虚构的,但在实际场景中,我使用的是与此类似的函数。 但是如果 x 大于 4 或小于 2,我该如何修改 if else 呢? 目前我只定义 x 是否大于 4...

def _print(x):
    if (x < 4).any():
        print('Zone %s does not make setpoint, see box plot below for the distribution of the data in DegF' % x.name)

    else:
        print('Zone %s meets zone temperature setpoint' % x.name)
        print('The average is %s in DegF' % x.mean())
    print('---')

df.apply(lambda x: _print(x))

【问题讨论】:

  • if x &gt; 4 or x &lt; 2...!?还是转成if 2 &lt;= x &lt;= 4: ... else: ...……!?或者if x in range(2, 5): ... else: ......!?
  • 实际上想要达到什么目的? df.apply 不是为打印字符串而设计的。为此目的使用它是非常低效的。
  • 您正在寻找如何使用Logical or operator 或如何编写Elif statements,但是您提出问题的方式很难说出您想要哪个。
  • 不太确定你在轴和确切逻辑方面追求什么,但似乎你最好希望得到一个类似的数据框:df[df.apply(pd.Series.between, args=(2, 4)).any(axis=1)].mean(),然后使用来自生产一些东西......
  • 你知道我该如何修改吗?在我的真实数据集上,我还为不符合设定点的数据创建了一个系列箱线图..

标签: python python-3.x pandas


【解决方案1】:

如果您只是对将条件过滤器应用于您的数据框感兴趣,那么您可以执行以下操作:

df[df.apply(lambda x: x>4) | df.apply(lambda x: x<2)]

然后作为第二步,您可以取满足您条件的列的平均值:

df[df.apply(lambda x: x>4) | df.apply(lambda x: x<2)].mean()

这会让你知道哪些列满足了你的条件,意味着什么。

【讨论】:

  • 是否可以像上面描述的那样调用单独的函数?例如,如果数据介于 2 和 4 之间,则只打印平均值。但如果数据超出此范围,请创建一个箱线图....谢谢
  • 你可以迈出我上面提到的第一步。这为您提供了一个数据框,其中包含数字(满足条件)和不满足条件的 NaN。然后你可以应用一个函数来调查这个数据框的列:如果所有行都是 NaN,则创建一个箱线图,如果至少有一个没有 NaN,则打印平均值。
  • 真正重要的一件事是我保留了列的名称。在我的真实数据问题上,我将如何回过头来根据列的名称找出问题所在,无论如何,您可以再给我一个关于如何保留列名的提示吗?基本上,我的示例是如果数据超出 2-4 的范围,则创建一个箱线图。否则打印 .mean()。非常感谢任何解决此问题的方法,特别是如果我不必使用外部熊猫系列。
【解决方案2】:
if x > 4 or x < 2:
    //blah

这就是你在 python 中定义它的方式(大多数其他语言只是替换或用||。)如果你问如何将它变成一个 if 语句。我不明白你可能还会问什么。

【讨论】:

  • 由于 Pandas 系列,我收到此错误,'The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().', 'occurred at index a') 非常感谢任何关于如何修改的想法...
猜你喜欢
  • 2021-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-19
  • 2017-05-08
  • 2020-08-27
  • 1970-01-01
相关资源
最近更新 更多