[docs]classAnnotatorInternal:"""Adds annotations column. Uses attribute `config` to add annotations. Its format should be as: .. code-block:: { "vaccinations": [{ 'annotation_text': 'Data for China added on Jun 10', 'location': ['World', 'Asia', 'Upper middle income'], 'date': '2020-06-10' }], "case-tests": [{ 'annotation_text': 'something', 'location': ['World', 'Asia', 'Upper middle income'], 'date': '2020-06-11' }], } ``` Keys in config should match those in `internal_files_columns`. """def__init__(self,config:dict):self.config=config
[docs]defadd_annotations(self,df:pd.DataFrame,stream:str)->pd.DataFrame:ifstreaminself.streams:print(f"Adding annotation for {stream}")returnself._add_annotations(df,stream)returndf
[docs]def_add_annotations(self,df:pd.DataFrame,stream:str)->pd.DataFrame:df=df.assign(annotations=pd.NA)conf=self.config[stream]forcinconf:ifnot("location"incand"annotation_text"inc):raiseValueError(f"Missing field in {stream} (`location` and `annotation_text` are required).")ifisinstance(c["location"],str):mask=df.location==c["location"]elifisinstance(c["location"],list):mask=df.location.isin(c["location"])if"date"inc:mask=mask&(df.date>=c["date"])df.loc[mask,"annotations"]=c["annotation_text"]returndf