Update a DataFrame at compiled speed

Hand a DataFrame's columns to numba as a Pandas_nb, mutate them inside an @njit function, and watch the original DataFrame change — numeric columns are shared views, not copies.

import pandas as pd
from numba import njit
from pandas_numba import f_df_to_nb, f_nb_to_np

df = pd.DataFrame({"a": [1., 2., 3.], "b": [1, 2, 3]})
pandas_nb = f_df_to_nb(df)                 # columns shared as views

@njit
def f_update(pandas_nb):
    pandas_nb.m_floats["a"][:] = pandas_nb.m_floats["a"] * 2   # df will be changed (shared view)
    pandas_nb.f_add_int("c", pandas_nb.m_ints["b"] + 10)       # new int column (built in nopython)

f_update(pandas_nb)                        # run in nopython mode
df["c"] = f_nb_to_np(pandas_nb, "c")       # copy the new column back into df
print(df)
#      a  b   c
# 0  2.0  1  11
# 1  4.0  2  12
# 2  6.0  3  13