我有两个具有相同形状,索引和列的pandas数据帧A,B
。 A
的每个元素都是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数据帧之间以元素方式运行?
答案 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]