我有一个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的新手,我无法弄清楚如何继续。我能够使用模式函数计算最重复的年龄,但我无法弄清楚如何检查一列并打印相应的其他列。请帮忙。
我能够找到答案,我只需要分析第一行。
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))
答案 0 :(得分:1)
我不能完全确定我是否清楚地理解了你的逻辑,以确定最大存活率的年龄。假设具有最高1s的年龄具有最高的存活率,则编写以下代码
当我使用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)时间复杂度并且将是最快的。