每个人,通常我可以解决已经发表的问题,但是这次我做不到。所以,我的第一个问题。
我有一个Pandas DataFrame(从.xlsx转换),具有大量(> 20000)行,就像这样
> id sex age date swab outcome death_day
对于每个 id 我都有很多行 我想和一个熊猫
> id sex age first_POSITIVE_date(or null) last_DATE_swab_outcome death_day
我可以使用Excel来完成此操作,但是由于ID重复,将花费很长时间,是否可以通过熊猫获得它?
我在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
答案 0 :(得分:0)
似乎是您想要的:
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()