In the current implementation apply calls func twice on the first column/row to decide whether it can take a fast or slow code path. This can lead to unexpected behavior if func has side-effects, as they will take effect twice for the first column/row.

In my opinion apply() should have an option to disable this check. Sometimes for functions with side effects, consistent behaviour is more important that speed.

Comment From: TomAugspurger

Are you able to use .pipe rather than apply for your use-case?

Comment From: jreback

this is a dupe of #2936

this can simply be fixed. To compute starting at the next row.