【问题标题】:Python: Compare arrays of indexes of different lengths in loopPython:在循环中比较不同长度的索引数组
【发布时间】:2021-09-20 22:03:22
【问题描述】:

我正在尝试遍历我的索引值,并在索引相同时执行操作 A,在索引不同时执行操作 B。

我的索引是一个哈希码,它在数据帧中重复,如下例所示。

我可以理解为什么会出现这些错误,但我不知道如何比较它们。我不想使用 groupby() 因为它会导致我的代码出现更多问题(请参阅问题 Python: Issue with groupby() and apply() when applying defined haversine function

我发现了建议使用 isin() 的其他问题,但这似乎不适用于此处。我能做什么?

# Unique index values
index_unique = df.index.unique().array

# All index values (including duplicates)
index_all = df.index.array

index_unique
>>
<PandasArray>
['356a192b7913b04c54574d18c28d46e6395428ab',
 'da4b9237bacccdf19c0760cab7aec4a8359010b0',
 '77de68daecd823babbb58edb1c8e14d7106e83bb']
Length: 3, dtype: object


index_all
>>
<PandasArray>
['356a192b7913b04c54574d18c28d46e6395428ab',
 '356a192b7913b04c54574d18c28d46e6395428ab',
 '356a192b7913b04c54574d18c28d46e6395428ab',
 'da4b9237bacccdf19c0760cab7aec4a8359010b0',
 'da4b9237bacccdf19c0760cab7aec4a8359010b0',
 '77de68daecd823babbb58edb1c8e14d7106e83bb',
 '77de68daecd823babbb58edb1c8e14d7106e83bb',
 '77de68daecd823babbb58edb1c8e14d7106e83bb',
 '77de68daecd823babbb58edb1c8e14d7106e83bb']
Length: 9, dtype: object

尝试时:

while index_all == index_unique:
    print("same index")

我得到错误:

('长度必须匹配才能比较', (9,), (3,))

尝试 for 循环时出现同样的错误:

for i in index_all:
    if index_all == index_unique:
        print("same index")
    else:
        print("not the same index")

尝试时:

while index_all.isin(index_unique):
    print("same index")

我得到错误:

'PandasArray' 对象没有属性 'isin'

【问题讨论】:

  • 你不能直接比较两个不同长度的数组,而不访问它的元素。尝试使用嵌套 for 循环:for i in index_all: for j in index_unique: if i == j: print('Same index') else: print("Not the same index") 我认为解释您的总体目标会很有用,因为 Pandas 有很多内置方法可以避免迭代值。
  • 这成功了!谢谢。我正在尝试应用 hasrsine 函数来计算具有相同索引的那些行的距离。为此,我之前尝试使用 groupby,但由于它存在问题,因此考虑使用循环。

标签: python arrays pandas for-loop while-loop


【解决方案1】:

也将其添加为答案。

如果不访问其元素,您无法直接比较两个不同长度的数组。尝试使用嵌套的 for 循环:

for i in index_all:
  for j in index_unique:
    if i == j:
      print('Same index')
    else:
      print("Not the same index")

【讨论】:

    【解决方案2】:

    试试下面的:

    def compareArray(index_unique, index_all): 
            matchCount = 0
            for val in index_unique:
                if val in index_all:
                   matchCount += 1
        
            if(matchCount == len(index_unique)):
               return True
            else:
               return False
                
    

    【讨论】:

      猜你喜欢
      • 2019-02-28
      • 1970-01-01
      • 2018-04-10
      • 1970-01-01
      • 2013-04-02
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多