pythonadvanced

Custom Pandas Accessor Extension

Create a reusable @pd.api.extensions.register_dataframe_accessor for domain-specific DataFrame methods.

python
import pandas as pd

@pd.api.extensions.register_dataframe_accessor('finance')
class FinanceAccessor:
    def __init__(self, df: pd.DataFrame):
        self._validate(df)
        self._df = df

    @staticmethod
    def _validate(df):
        if 'price' not in df.columns or 'qty' not in df.columns:
            raise AttributeError("DataFrame must have 'price' and 'qty' columns")

    def revenue(self) -> pd.Series:
        return self._df['price'] * self._df['qty']

    def summary(self) -> pd.DataFrame:
        return self._df.assign(revenue=self.revenue()).describe()

df = pd.DataFrame({'price':[10.0,20.0,30.0],'qty':[3,1,5]})
print(df.finance.revenue())
print(df.finance.summary())

Use Cases

  • domain-specific pandas
  • reusable extensions
  • data science frameworks

Tags

Related Snippets

Similar patterns you can reuse in the same workflow.