我想让我的代码运行得更快。我刚刚开始研究数据科学并决定做一个项目。我下载了我们政府向公众提供的关于我国 Covid-19 死亡的信息,并从中制作了一个 csv 文件。它的结构如下所示:
table1
我将这张表格式化为更易于管理。
这是我最终使用的结构: table2
从表一中可以看出,每个人都患有多种疾病,我很好奇它们之间的“联系程度”,所以我创建了table3。
我们将所有独特的疾病作为列(在本例中超过 500 列),每一行代表一种独特的疾病。所以我们最终会得到一个 500X500 的表。所以说了这么多,让我们来回答我的问题:我怎样才能让我的代码,这将导致table3比现在更优化,因为它需要太多时间来编译(大约 240 秒,有 500 个唯一疾病)。这是我的代码:
import pandas as pd
from operator import add
import time
start_time = time.time()
#Columns:Id,Disease,Gender,Age
df=pd.read_csv('table2.csv')
headers=df.groupby('Disease').size().to_frame('size').reset_index().sort_values(['size'],ascending=[False])
headers=headers[headers['size']>10].Disease.unique()
network=pd.DataFrame(columns=headers)
for i in range(len(headers)):
temp_1=df[df.Disease == headers[i]]
ids=temp_1.Id.unique()
lista=[0]*len(headers)
for j in range(len(ids)):
temp_2=df[df.Id == ids[j]]
temp_2=temp_2[temp_2.Disease != headers[i]]
temp_lista=[]
for k in range(len(headers)):
temp_3=temp_2[temp_2.Disease == headers[k]]
temp_lista.append(len(temp_3))
lista=list(map(add,lista,temp_lista))
network.loc[i]=lista
network.insert(0,'Diseases',headers)
network.to_csv('table3.csv')
print ("My program took", time.time() - start_time, "to run")
非常感谢您的帮助!