I often use method chaining in pandas, although certain problems like calculating the second most common value are hard. A really good solution to adding custom functionality in a chain is Pandas pipe function.
For example to raise a function to the 3rd power with numpy you could use
np.power(df['x'], 3)
But another way with pipe is:
df['x'].pipe(np.power, 3)
Note that you can pass any positional or keyword arguments and they'll get passed along.
So df.pipe(f, *args, **kwargs)
is equivalent to f(df, *args, **kwargs)
.
If you build up a series of transforms on dataframes to dataframes you can then express this with a series of pipe
statements.
It even works with a groupby.