所以我想要做的是我有一个看起来像这样的csv文件:
"test_name", "Mean", "Median", "Std_Dev"
"Data Name 1", 50, 75, 10
"Data Name 2", 52, 80, 11
"Data Name 1", 53, 79, 9
"Data Name 2", 55, 78, 8
"Data Name 3", 54, 77, 7
"Data Name 3", 53, 71, 7
"Data Name 1", 51, 72, 8
现在,我有一个程序可以查找测试名称是否相互相等。因为如果它们具有相同的数据名称,我想比较它们拥有的数据。
import csv
csvfile = 'some.csv'
data = {}
with open('some.csv') as f:
reader = csv.DictReader(f)
for row in reader:
for (k,v) in row.items():
try:
data[k].append(v)
except KeyError:
data[k] = [v]
testNames = data['test_name']
mean = data['Mean']
median = data['Median']
std = data['Stdev']
for val in testNames:
for val2 in testNames:
if val == val2:
index = testNames.index(val)
index2 = testNames.index(val2)
medianTemp = median[index]
medianTemp2 = median[index2]
if medianTemp2 > medianTemp:
sub = medianTemp2 - medianTemp
if sub > 100:
print "Uh oh! @ ", val, "and ", val2 names only
也许,我在这里做了一些遥远的事情。我只是想比较具有相同测试名称的数据的中位数。在我已经比较了test_names之后,我正在努力获得行数据比较。我有那个部分在工作。
*******编辑********* 我正在尝试使用index()来查找元素位置。
现在我遇到的问题是索引和index2是完全相同的值。而不是数据名1给出索引0而下一个数据名1给出索引2为2.它们都给出0.
非常感谢任何建议。
谢谢:)
答案 0 :(得分:1)
您可以遍历testNames
的索引,然后使用索引访问行数据
for i in range(len(testNames)):
for j in range(len(testNames)):
if i != j and testNames[i] == testNames[j]:
# access row data using: data['Median'][i] data['Median'][j]
答案 1 :(得分:0)
虽然这可能不是您的目标,但您可能想知道pandas库是为这样的任务量身定制的;在这里,您可以按照您可能感兴趣的test_name
和perform whatever aggregatation对行进行分组。例如,如果您对每个组中的最小和最大中位数感兴趣,则可以执行以下操作: / p>
In [1]: import pandas as pd
In [2]: df = pd.read_csv('some.csv')
In [3]: df
Out[3]:
test_name "Mean" "Median" "Std_Dev"
0 Data Name 1 50 75 10
1 Data Name 2 52 80 11
2 Data Name 1 53 79 9
3 Data Name 2 55 78 8
4 Data Name 3 54 77 7
5 Data Name 3 53 71 7
6 Data Name 1 51 72 8
In [4]: df.groupby('test_name')[' "Median"'].agg([min, max])
Out[4]:
min max
test_name
Data Name 1 72 79
Data Name 2 78 80
Data Name 3 71 77