繁体   English   中英

Pandas,将 dataframe 转换为开始和结束日期

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM