Python:改变时间序列,使它们在给定的y值上匹配

2024-05-19 16:35:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写自己的代码来分析/可视化来自欧洲疾病预防控制中心的新冠病毒-19数据。 https://opendata.ecdc.europa.eu/covid19/casedistribution/csv'

我有一个简单的代码来提取数据并绘制累积死亡与时间的关系图,我正在尝试添加功能

我的目标类似于所附的图表,所有国家的时间都会在第五次死亡时进行匹配。我想编写一个通用代码,在第n次死亡时将国家进行匹配。 https://ourworldindata.org/grapher/covid-confirmed-deaths-since-5th-death

目前我尝试这样做的方式是有一个“如果组是‘国家’转移…”术语的迷宫

在哪里。。。是查找特定“国家”发生“n”起死亡事件的日期,并在适当情况下插入小数日期的查找

也就是说,目前的死亡分配为00:00天/月,但数据每天可以移动2/3,如下所示

日期时间累计死亡人数
00:00 15/02 80 00:00 16/02 110

我的“…”应该是16:00 15/02

我现在正在做这件事,但感觉不是很有效,我相信一定有一个更简单的方法,我没有看到

基本上,尽管有大量的谷歌搜索,我似乎找不到一种简单的方法来自动移动一组时间序列以匹配特定的y值,这感觉它应该有一些内置的功能,即使用插值进行查找

####Live url (I've downloaded my own csv and been calling that for code development)
url = 'https://opendata.ecdc.europa.eu/covid19/casedistribution/csv'

dataraw = pd.read_csv(url)

#extract relevanty colums
data = dataraw.loc[:,["dateRep","countriesAndTerritories","deaths"]]

####convert date format
data['dateRep'] = pd.to_datetime(data['dateRep'],dayfirst=True)

####sort by date
data = data.sort_values(["dateRep"],ascending=True)

data['cumdeaths'] = data.groupby(['countriesAndTerritories']).cumsum()




##### limit to countries with cumulative deaths > 500

data = data.groupby('countriesAndTerritories').filter(lambda x:x['cumdeaths'].max() >500)

###### remove China from data for now as it doesn't match so well with dates
data = data.groupby('countriesAndTerritories').filter(lambda x:(x['countriesAndTerritories'] != "China").any())

##### only recent dates
data = data[data['dateRep'] > '2020-03-01']

print(data)

Tags: csv数据代码httpsurldata时间国家
1条回答
网友
1楼 · 发布于 2024-05-19 16:35:00

您可以使用groupby('country')pd.transform函数添加一列,该列将在每一行中设置其国家第n次死亡的日期

然后,您可以对日期列和新列进行矢量减法,以获得天数

相关问题 更多 >