【发布时间】: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