pandas dataframe如何做“elementwise”连接?

时间:2017-10-05 07:38:48

标签: python pandas dataframe

我有两个具有相同形状,索引和列的pandas数据帧A,BA的每个元素都是np.ndarray,形状为(n,1)B的每个元素都是浮点值。现在我希望有效地B元素附加到A。一个最小的例子:

index = ['fst', 'scd']

column = ['a','b']

A
Out[23]: 
          a       b
fst  [1, 2]  [1, 4]
scd  [3, 4]  [3, 2]

B
Out[24]: 
            a         b
fst  0.392414  0.641136
scd  0.264117  1.644251

resulting_df = pd.DataFrame([[np.append(A.loc[i,j], B.loc[i,j]) for i in index] for j in column], columns=column, index=index)

resulting_df
Out[27]: 
                              a                           b
fst  [1.0, 2.0, 0.392414377685]  [3.0, 4.0, 0.264117463613]
scd  [1.0, 4.0, 0.641136433253]   [3.0, 2.0, 1.64425062851]

是否有类似pd.DataFrame.applymap的内容可以在两个而不仅仅是一个pandas数据帧之间以元素方式运行?

2 个答案:

答案 0 :(得分:3)

您可以使用applymap将df2中的元素转换为列表,然后将普通加法组合成列表,即

index = ['fst', 'scd']

column = ['a','b']


A = pd.DataFrame([[[1, 2],[1, 4]],[[3, 4],[3, 2]]],index,column)
B = pd.DataFrame([[0.392414,0.264117],[ 0.641136 , 1.644251]],index,column)

选项1

n =  B.applymap(lambda y: [y])
ndf = A.apply(lambda x : x+n[x.name])

选项2 : 使用pd.concat来了解其工作原理检查here

pd.concat([A,B]).groupby(level=0).apply(lambda g: pd.Series({i: np.hstack(g[i].values) for i in A.columns}))

为了使你当前的方法给出正确的输出移位循环,即

pd.DataFrame([[np.append(A.loc[i,j], B.loc[i,j]) for j in A.columns] for i in A.index], columns=A.columns, index=A.index)

输出:

                       a                     b
fst  [1.0, 2.0, 0.392414]  [1.0, 4.0, 0.264117]
scd  [3.0, 4.0, 0.641136]  [3.0, 2.0, 1.644251]

答案 1 :(得分:0)

你可以简单地这样做:

>>> A + B.applymap(lambda x : [x])
                    a                 b
fst  [1, 2, 0.392414]  [1, 4, 0.264117]
scd  [3, 4, 0.641136]  [3, 2, 1.644251]