熊猫,将数据框转换为开始日期和结束日期

时间:2020-04-30 13:42:02

标签: python pandas

每个人,通常我可以解决已经发表的问题,但是这次我做不到。所以,我的第一个问题。

我有一个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

1 个答案:

答案 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()