【问题标题】:Compare elements in two arrays and return True when one value is greater than the other using python使用python比较两个数组中的元素并在一个值大于另一个值时返回True
【发布时间】:2018-07-11 01:53:03
【问题描述】:

我正在尝试在 python 中编写一个 for 循环,将一个数组 px 中的每个第 i 个元素与另一个数组 py 中的第 i 个元素进行比较。如果px 中的元素大于或等于py 的元素,我想将该值记为True 或1。

这里有一些代码。

import pandas as pd
import random

px = np.random.normal(loc=0, scale=1, size=1000)
py = np.random.normal(loc=0, scale=1, size=1000)

for x, y in zip(px, py):
    print("{}% {}".format(x, y))
    if px[i] >= py[i]:
       px['status'] = True
    if px[i] < py[i]:
       px['status'] = False

最终的数据框应如下所示:

px                py                status
-2.24239571e-01   -1.83834445e+00   False
1.20102447e+00    5.01755172e-03    False    
8.82060986e-02    -2.55639665e-02   True

我知道我的 for 循环有一些问题。

【问题讨论】:

  • 您通过遍历数组来破坏使用numpy 的意义。以矢量化方式执行此操作:x = px &gt;= py
  • Pandas 支持向量化操作,解决方法很简单 df['status'] = df.px >= df.py
  • 请不要这样改变问题。您从我的答案中取出了解决您问题的所有代码,并将其用作基础来开始一个全新的问题(!)。这使所有 cmets 和答案完全无效。如果这不能解决您的预期问题,那么您应该打开一个新问题,但如果这个问题(如最初询问的那样)已解决,请酌情标记为已接受。
  • 好的,会的!不知道。谢谢!!

标签: python arrays pandas for-loop random


【解决方案1】:

如果你想要速度,你不应该遍历数组。相反,可以使用df['status'] = px &gt;= py 在矢量化操作中进行比较。从您的问题中不清楚数据是否已经在 Dataframe 中,所以从头开始:

import numpy as np
import pandas as pd
px = np.random.normal(loc=0, scale=1, size=1000)
py = np.random.normal(loc=0, scale=1, size=1000)

df = pd.DataFrame({'px': px, 'py': py, 'status': px >= py})
print(df.head())

【讨论】:

  • 我也刚看了你的评论。这是一种更简单的方法。非常感谢。
  • 嗨@roganjosh,您的原始答案很好,但我意识到我把问题搞砸了,实际上发布的答案还不够。如果可以,请尝试并回答。您会看到问题已更改。我仍会将您的问题标记为正确答案。
【解决方案2】:

首先,您用作索引的i 未定义。 相反,只需使用您已经从 for 循环中获得的 xy

【讨论】:

    猜你喜欢
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-08
    • 2016-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多