{"record":{"id":"f3be1bfd917ba971","repo":"apache/beam","slug":"per-level-align","errorCode":null,"errorMessage":"per-level align","messagePattern":"per-level align","errorType":"exception","errorClass":"NotImplementedError","httpStatus":null,"severity":"error","filePath":"sdks/python/apache_beam/dataframe/frames.py","lineNumber":1416,"sourceCode":"            'append', lambda s, to_append: s.append(\n                to_append, verify_integrity=verify_integrity, **kwargs),\n            [self._expr, to_append._expr],\n            requires_partition_by=requires,\n            preserves_partition_by=partitionings.Arbitrary()))\n\n  @frame_base.with_docs_from(pd.Series)\n  @frame_base.args_to_kwargs(pd.Series)\n  @frame_base.populate_defaults(pd.Series)\n  def align(self, other, join, axis, level, method, **kwargs):\n    \"\"\"Aligning per-level is not yet supported. Only the default,\n    ``level=None``, is allowed.\n\n    Filling NaN values via ``method`` is not supported, because it is\n    `order-sensitive\n    <https://s.apache.org/dataframe-order-sensitive-operations>`_.\n    Only the default, ``method=None``, is allowed.\"\"\"\n    if level is not None:\n      raise NotImplementedError('per-level align')\n    if method is not None and method != lib.no_default:\n      raise frame_base.WontImplementError(\n          f\"align(method={method!r}) is not supported because it is \"\n          \"order sensitive. Only align(method=None) is supported.\",\n          reason=\"order-sensitive\")\n    # We're using pd.concat here as expressions don't yet support\n    # multiple return values.\n    aligned = frame_base.DeferredFrame.wrap(\n        expressions.ComputedExpression(\n            'align', lambda x, y: pd.concat([x, y], axis=1, join='inner'),\n            [self._expr, other._expr],\n            requires_partition_by=partitionings.Index(),\n            preserves_partition_by=partitionings.Arbitrary()))\n    return aligned.iloc[:, 0], aligned.iloc[:, 1]\n\n  argsort = frame_base.wont_implement_method(\n      pd.Series, 'argsort', reason=\"order-sensitive\")\n","sourceCodeStart":1398,"sourceCodeEnd":1434,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/python/apache_beam/dataframe/frames.py#L1398-L1434","documentation":"align() with a level= argument would require aligning per index level, which Beam's partitioned implementation does not support; it raises NotImplementedError('per-level align'). method= for fill is separately rejected as order-sensitive.","triggerScenarios":"df1.align(df2, level=0) or align(..., level='name') — any non-None level argument; method='ffill'/'bfill' hits the adjacent WontImplementError instead.","commonSituations":"pandas code aligning MultiIndexed frames on a level; forward-filling alignment patterns ported to Beam; join-like workflows better expressed with merge/join in Beam.","solutions":["Drop level= and align on fully matching indexes, or pre-reset the indexes so they are flat","Use join/merge (which Beam supports) instead of per-level alignment","Reindex explicitly with supported operations if a join-like alignment is needed"],"exampleFix":"// before\nl, r = df1.align(df2, level=0)\n// after\nl, r = df1.align(df2.reset_index(level=0, drop=True))","handlingStrategy":"validation","validationCode":"if level is not None:\n    raise NotImplementedError(\"per-level align unsupported; flatten indexes first\")\nif method is not None and method is not lib.no_default:\n    raise NotImplementedError(\"align(method=...) unsupported; use method=None\")","typeGuard":null,"tryCatchPattern":"try:\n    l, r = a.align(b, level=lv)\nexcept NotImplementedError:\n    l, r = a.align(b.reset_index(level=lv, drop=True))","preventionTips":["Avoid level= in align() under Beam","Only use align(method=None) (the default)","Prefer join/merge for level-based alignment needs"],"tags":["python","apache-beam","dataframe","not-implemented"],"backgroundTag":"method-not-implemented","analyzedSha":"12126d8942aaf848030c478b4c6a28c6af861c66","analyzedAt":"2026-09-13T01:50:10.254Z","contentChangedAt":"2026-09-13T01:50:10.254Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}