假设我在 - 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]
答案 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中更优雅地完成。