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

时间:2015-07-24 13:19:04

标签: python pandas

假设我在 - 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]

1 个答案:

答案 0 :(得分:4)

一种解决方案可能是对列表进行排序,然后比较连续项,每当差异太小时添加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中更优雅地完成。