从具有相同df长度的numpy数组的字典向熊猫数据帧添加列的最快/最佳方法? 编辑:结果

问题描述

可能是一个简单的问题,我已经搜索过,但是找不到解决方法。

我的代码类似于

data_df = pd.DataFrame([
    ['2012-02-22','3','a',6],['2012-02-23','3.2','g',8],['2012-02-24','5.2','l',2],['2012-02-25','1.4','i',4]],columns=['date','1','2','3'])
dict_a = {
    'a': np.array([False,True,False,False],dtype='bool'),'b': np.array([True,'c': np.array([False,}

我想拥有一个这样的df

              1  2  3      a      b      c
date                                      
2012-02-22    3  a  6  False   True  False
2012-02-23  3.2  g  8   True   True   True
2012-02-24  5.2  l  2  False  False   True
2012-02-25  1.4  i  4  False  False  False

直到现在,我找到的最好的方法就是这个,但是对我来说似乎很困难

data_df = data_df.set_index('date')
df_dict = pd.DataFrame.from_dict(dict_a)
df_dict['date'] = data_df.index
df_dict = df_dict.set_index('date')
df_new = pd.merge(data_df,df_dict,left_index=True,right_index=True)

有更快/更好的方法吗?

编辑:结果

感谢大家的快速响应。 我做了一些计时,(到目前为止)使用给定的数据看起来最快,是第一名。

def df_new1():
    data_df = pd.DataFrame([
        ['2012-02-22','3'])

    dict_a = {
        'a1': np.array([False,'b1': np.array([True,'c1': np.array([False,}
    return pd.concat((data_df,pd.DataFrame(dict_a)),axis=1).set_index('date')


def df_new2():
    data_df = pd.DataFrame([
        ['2012-02-22',}
    return data_df.assign(**dict_a).set_index('date')


def df_new3():
    data_df = pd.DataFrame([
        ['2012-02-22',}
    return data_df.join(pd.DataFrame(dict_a)).set_index('date')


def df_new4():
    data_df = pd.DataFrame([
        ['2012-02-22',}
    for keys in dict_a:
        data_df[keys] = dict_a[keys]
    return data_df.set_index('date')

print('df_new1',timeit(df_new1,number=1000))
print('df_new2',timeit(df_new2,number=1000))
print('df_new3',timeit(df_new3,number=1000))
print('df_new4',timeit(df_new4,number=1000))
df_new1 2.0431520210004237
df_new2 2.6708478379987355
df_new3 2.4773063749998983
df_new4 2.910699995998584

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)