代码之家  ›  专栏  ›  技术社区  ›  splinter

熊猫柱的高效积

  •  2
  • splinter  · 技术社区  · 9 年前

    df1 = pd.DataFrame([[1,2], [1,2]], columns = ['a', 'b'])
    df2 = pd.DataFrame([[3,4], [3,4]], columns = ['c', 'd'])
    

    看起来像

    df1                 df2
       a  b                c  d
    0  1  2             0  3  4
    1  1  2             1  3  4
    

    我正在寻找一个不带循环的函数:

    df
       a_c  a_d  b_c  b_d
    0  3    4    6    8
    1  3    4    6    8
    
    3 回复  |  直到 9 年前
        1
  •  3
  •   Zero    9 年前

    你可以用 pd.concat 具有 add_prefix 和 mul df2 df1 的系列。

    In [806]: pd.concat([df2.mul(df1[c], axis=0).add_prefix(c+'_') for c in df1], axis=1)
    Out[806]:
       a_c  a_d  b_c  b_d
    0    3    4    6    8
    1    3    4    6    8
    
        2
  •  2
  •   Zero    9 年前

    这可能是一种选择:

    dfjoin = pd.concat((df2.mul(y, axis=0) for _, y in df1.iteritems()), axis=1, keys=df1)
    # This next line courtesy of MaxU's comment:
    dfjoin.columns = dfjoin.columns.map('_'.join)
    dfjoin
       a_c  a_d  b_c  b_d
    0    3    4    6    8
    1    3    4    6    8
    
        3
  •  1
  •   Divakar    9 年前

    broadcasting 处理底层阵列数据,注重性能效率-

    out = (df2.values[:,None] * df1.values[:,:,None]).reshape(df1.shape[0],-1)
    cols = [i+'_'+j for i in df1.columns for j in df2.columns]
    df_out = pd.DataFrame(out, columns = cols)