我有一个csv文件,格式如下:
30 1964 1 1
30 1962 3 1
30 1965 0 1
31 1959 2 1
31 1965 4 1
33 1958 10 1
33 1960 0 1
34 1959 0 2
34 1966 9 2
34 1958 30 1
34 1960 1 1
34 1961 10 1
34 1967 7 1
34 1960 0 1
35 1964 13 1
35 1963 0 1第一列表示年龄,最后一列表示存活率(如果患者存活5年或更长时间,则为1;如果患者在5年内死亡,则为2)我必须计算哪个年龄具有最高的存活率。我是python的新手,我不知道该怎么做。我可以使用mode函数计算重复次数最多的年龄,但我不知道如何检查一列并打印相应的另一列。请帮帮忙。
我找到了一个答案,我只需要分析第一行。
import csv
import matplotlib.pyplot as plt
import numpy as np
df = open('Dataset.csv')
csv_df=csv.reader(df)
a=[]
b=[]
for row in csv_df:
a.append(row[0])
b.append(row[3])
print('The age that has maximum reported incidents of cancer is '+ mode(a))发布于 2016-09-24 06:27:15
我不完全确定我是否清楚地理解了你的逻辑,即确定存活率最高的年龄。假设具有最高数量的1的年龄具有最高的存活率,则编写以下代码
当我使用csv时,我做了一些不同的读取部分,因为数据集是有线的。如果csv模块在您的环境中运行良好,请使用它。其思想是,检索每一行中的值的每个元素;我们感兴趣的是第0列和第3列。
在下面的代码中,我们维护一个名为survival_map的字典,并计算与1关联的特定年龄的频率。
import operator
survival_map = {}
with open('Dataset.csv', 'rb') as in_f:
for row in in_f:
row = row.rstrip() #to remove the end line character
items = row.split(',') #I converted the tab space to a comma, had a problem otherwise
age = int(items[0])
survival_rate = int(items[3])
if survival_rate == 1:
if age in survival_map:
survival_map[age] += 1
else:
survival_map[age] = 1一旦我们构建了字典,{33: 2,34: 5,35: 2,30: 3,31: 2},它就会按键反向排序:
sorted_survival_map = sorted(survival_map.items(), key=operator.itemgetter(1), reverse = True)
max_survival = sorted_survival_map[0]更新:
对于单个最大值,最好使用OP的建议(在注释中)。在这里发帖:
maximum = max(dict, key=dict.get)
print(maximum, dict[maximum])对于多个最大值
max_keys = []
max_value = 0
for k,v in survival_map.items():
if v > max_value:
max_keys = [k]
max_value = v
elif v == max_value:
max_keys.append(k)
print [(x, max_value) for x in max_keys] 当然,这可以通过字典理解来实现;然而,为了可读性,我建议这样做。而且,这是通过一次遍历字典中的对象来完成的,而不需要多次遍历。因此,该解决方案具有O(n)时间复杂度,并且将是最快的。
https://stackoverflow.com/questions/39669659
复制相似问题