| 189 | |
| 190 | @staticmethod |
| 191 | def normalize_crypto( |
| 192 | df: pd.DataFrame, |
| 193 | calendar_list: list = None, |
| 194 | date_field_name: str = "date", |
| 195 | symbol_field_name: str = "symbol", |
| 196 | ): |
| 197 | if df.empty: |
| 198 | return df |
| 199 | df = df.copy() |
| 200 | df.set_index(date_field_name, inplace=True) |
| 201 | df.index = pd.to_datetime(df.index) |
| 202 | df = df[~df.index.duplicated(keep="first")] |
| 203 | if calendar_list is not None: |
| 204 | df = df.reindex( |
| 205 | pd.DataFrame(index=calendar_list) |
| 206 | .loc[ |
| 207 | pd.Timestamp(df.index.min()).date() : pd.Timestamp(df.index.max()).date() |
| 208 | + pd.Timedelta(hours=23, minutes=59) |
| 209 | ] |
| 210 | .index |
| 211 | ) |
| 212 | df.sort_index(inplace=True) |
| 213 | |
| 214 | df.index.names = [date_field_name] |
| 215 | return df.reset_index() |
| 216 | |
| 217 | def normalize(self, df: pd.DataFrame) -> pd.DataFrame: |
| 218 | df = self.normalize_crypto(df, self._calendar_list, self._date_field_name, self._symbol_field_name) |