首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >for循环使用python2.7查找每三个元素的最小差异

for循环使用python2.7查找每三个元素的最小差异
EN

Stack Overflow用户
提问于 2017-03-07 23:17:22
回答 2查看 54关注 0票数 1

我想使用for循环通过python2.7找到每三个元素的最小差异

这是我的test.csv数据

代码语言:javascript
复制
E1-2    u7  4
E1-2    u7  7
E1-2    u7  8
F(1)-1  u7  3
F(1)-1  u7  9
F(1)-1  u7  8
..     ..  ..

我想要得到以下结果

代码语言:javascript
复制
E1-2    u7  7
E1-2    u7  8
F(1)-1  u7  8
F(1)-1  u7  9
..     ..  ..

因为在"E1-2“组中,最小差元是7和8

代码语言:javascript
复制
8-4=5
8-7=1  # the minimal difference
7-4=3

这是我的伤风,但有一些问题。谁能帮我修改一下?谢谢。

代码语言:javascript
复制
from itertools import tee, izip
def pairwise(iterable):
    "s -> (s0,s1), (s1,s2), (s2, s3), ..."
    a, b = tee(iterable)
    next(b, None)
    return izip(a, b)`

def mins (datas):
mi=min(pairwise(sorted(datas)), key=lambda x: x[1] - x[0])
return list(mi)`

import pandas as pd
qrt=pd.read_csv("test.csv")

def cul(dat,sam):
#results=pd.DataFrame()
a=dat.iloc[0:2]
b=pd.Series(mins(dat[sam].tolist()))
a.loc[:,'D']=b
return a`

for i in range(0,len(qrt["Ct"])-1,3):
     results=pd.DataFrame()
 group=qrt[i:i+3]
 c=cul(group,"Ct")
 results=results.append(c)
 print results.head()

输出:

代码语言:javascript
复制
  Sample Detector      Ct       D
0   E1-2     u7  4  7
1   E1-2     u7  7  8
  Sample Detector      Ct   D
3  F(1)-1     u7  3 NaN
4  F(1)-1     u7  9 NaN
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-07 23:41:51

代码语言:javascript
复制
from collection import defaultdict
import itertools
import csv

d = defaultdict(list)
with open("test.csv", newline='') as f:
    r = csv.reader(f)
    for row in r:
         row[2] = float(row[2])
         d[row[0]].append(row)

for k, v in d.items():
    a, b = min(itertools.combinations(v, 2), key=lambda x: abs(x[0][2]-x[1][2]))
    print(a)
    print(b)

我们将使用itertools.combinations来查找所有元素对,然后找到差异最小的元素对,并打印该对中的每个元素。您可以将这些print替换为您想要对该数据执行的任何操作

票数 0
EN

Stack Overflow用户

发布于 2017-03-07 23:59:11

代码语言:javascript
复制
data = [("a", 3), ("a", 5), ("a", 8), ("b", 18), ("b", 13), ("b", 19)]

indexes = set(index for index, _ in data)

index_values = {index:[value for i, value in data if i == index] for index in indexes}

from itertools import combinations

def difference(pair):
    x, y = pair
    return abs(x - y)

def smallest_difference(values):
    min_diff, min_pair = min((difference(pair), pair) for pair in combinations(values,2))
    return min_pair

index_min_pairs = {index:smallest_difference(values) for index, values in index_values.items()}

answer = [(index, min_value) for index in index_min_pairs for min_value in index_min_pairs[index]]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42651927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档