Python 向dataframe添加新列的有效方法

Python 向dataframe添加新列的有效方法,python,pandas,Python,Pandas,我知道两种向dataframe添加新列的方法 df_new = df.assign(new_column=default_value) 及 第一个不在原地添加列,但第二个却在原地添加列。那么,哪一个更有效 除了这两种方法之外,还有比这两种方法更有效的方法吗?我认为第二种方法,如果需要链接所有函数的漂亮代码,可以使用它-一行代码: df = pd.DataFrame({'A':np.random.rand(10000)}) default_value = 10 In [114]: %time

我知道两种向dataframe添加新列的方法

df_new = df.assign(new_column=default_value)

第一个不在原地添加列,但第二个却在原地添加列。那么,哪一个更有效

除了这两种方法之外,还有比这两种方法更有效的方法吗?

我认为第二种方法,如果需要链接所有函数的漂亮代码,可以使用它-一行代码:

df = pd.DataFrame({'A':np.random.rand(10000)})

default_value = 10

In [114]: %timeit df_new = df.assign(new_column=default_value)
228 µs ± 4.26 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

In [115]: %timeit df['new_column'] = default_value
86.1 µs ± 654 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
我使用perfplot进行绘图:



我认为问题是关于性能的,所以重新打开。原始问题在评论中讨论了相对性能。
df = pd.DataFrame({'A':np.random.rand(10000)})

default_value = 10

In [114]: %timeit df_new = df.assign(new_column=default_value)
228 µs ± 4.26 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

In [115]: %timeit df['new_column'] = default_value
86.1 µs ± 654 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
import perfplot

default_value = 10

def chained(df):
    df = df.assign(new_column=default_value)
    return df

def no_chained(df):
    df['new_column'] = default_value
    return df

def make_df(n):
    df = pd.DataFrame({'A':np.random.rand(n)})
    return df

perfplot.show(
    setup=make_df,
    kernels=[chained, no_chained],
    n_range=[2**k for k in range(2, 25)],
    logx=True,
    logy=True,
    equality_check=False,
    xlabel='len(df)')