如何(有效地)检查任何两个元素是否相差10

2024-04-28 03:19:30 发布

您现在位置:Python中文网/ 问答频道 /正文

假设在--pandas--dataframe中有以下列:

      x   
1   589 
2   354 
3   692 
4   474 
5   739 
6   731 
7   259 
8   723 
9   497 
10   48  

注意:我已经将索引改为从1开始(参见测试数据)。你知道吗

我只想测试一下这个列中任何两个项目之间的差异是否小于10。 最终结果:两个元素的绝对差值不应小于10。你知道吗

目标:

      x   
1   589 
2   354 
3   692 
4   474 
5   749    #
6   731 
7   259 
8   713    #
9   497 
10   48  

或许可以通过以下方式实现:

for index, row in df.iterrows():

然而,到目前为止还没有成功。。。你知道吗

考虑到我希望执行元素级比较,我不期望分段速度。。。你知道吗


试验数据:

import pandas as pd

 df = pd.DataFrame(index = range(1,stim_numb+1), columns= ['x'])
 df['x'] = [589, 354, 692, 474, 739, 731, 259, 723, 497, 48]

Tags: 项目in元素目标dataframepandasdffor
1条回答
网友
1楼 · 发布于 2024-04-28 03:19:30

一种解决方案可能是对列表排序,然后比较连续的项,每当差异太小时添加10,然后将列表排序回原始顺序(如果需要)。你知道吗

from operator import itemgetter
lst = [589, 354, 692, 474, 739, 731, 259, 723, 497, 48]
# temp is list as pairs of original index and value, sorted by value
temp = [[i, e] for i, e in sorted(enumerate(lst), key=itemgetter(1))]
last = None
for item in temp:
    while last is not None and item[1] < last + 10:
        item[1] += 10
    last = item[1]
# sort the list back to original order using the index from the tuple
lst_new = [e for i, e in sorted(temp, key=itemgetter(0))]

结果是[589, 354, 692, 474, 759, 741, 259, 723, 497, 48]

这是使用简单的Python列表;也许可以在Pandas或Numpy中更优雅地完成。你知道吗

相关问题 更多 >