[英]Pandas, Convert dataframe to start and end date
大家,通常我可以解决阅读已经发布的问题的问题,但这次我不能。 所以,我的第一个问题。
我有一个 Pandas DataFrame (从.xlsx 转换),行数很大(> 20000),像这样
> id sex age date swab outcome death_day
对于每个id我有一堆行我想得到一个 pandas
> id sex age first_POSITIVE_date(or null) last_DATE_swab_outcome death_day
我可以用 Excel 做到这一点,但由于重复 ID 需要很长时间,有没有办法用 pandas 得到它?
我创建了一个 csv 可在csv访问
编辑:好的,我现在试试
> id sex age date swab outcome death_day
> 1 M 56 01/04/2020 Neg Na
> 2 F 50 01/04/2020 Pos Na
> 2 F 50 15/04/2020 Neg Na
> 3 M 78 15/04/2020 Neg Na
> 1 M 56 15/04/2020 Pos Na
> 2 F 50 16/04/2020 Neg Na
> 1 M 56 20/04/2020 Neg Na
想要的是
> id sex age first_POSITIVE_date(or null) last_DATE swab_outcome death_day
> 1 M 56 15/04/2020 20/04/2020 Pos Na
> 2 F 50 01/04/2020 16/04/2020 Neg Na
> 3 M 78 na 15/04/2020 Neg Na
似乎这是您想要的:
although you should share your data snippet in such a way that doesn't require people to log on to sharepoint
df['date'] = pd.to_datetime(df['date'])
df_1 = df[df['swab']=='Positive'].groupby(['id','sex','age','death_day'],as_index=False)\
.agg({'date':'min'})
df_1.columns = ['id','sex','age','death_day','first_positive_date']
df_2 = df[['id','date','swab outcome']].drop_duplicates()
df_2.columns = ['id','last_date','last_date_swab_outcome']
df = df[['id','sex','age','death_day']].drop_duplicates()
df = df.merge(df_1,how='left')
df = df.merge(df_2,how='left')
df.head()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.