如何将多维数据框添加到另一个多维数据框作为联合?

时间:2017-11-24 21:38:50

标签: python pandas dataframe

我有以下数据框:

MAIN数据框A:

   A  B
0  1  0
1  1  0

第二个数据帧B:

   A  B
0  0  1
1  1  0

第三个数据帧C:

   A  B  C
0  1  0  0
1  0  1  1
2  0  0  1

在python pandas中,我希望以这样的方式添加A,B和Cthem,使得结果数据帧D的结构包含与MAIN数据帧A相同的列和行结构,同时添加行/列的值

A + B + C

   A  B 
0  2  1 
1  2  1 

并且通过Union添加,我的意思是如果值> 1,做到1.所以最后 A + B + C是:

   A  B 
0  1  1 
1  1  1 

如您所见,保留了第一个A数据帧的结构,同时添加了常见行和列的值。常见的行和列是可变的,因此我需要一个代码来通过检测常见的行和列来自动执行此操作。任何想法如何做到这一点?

更新

请注意,数据框可以是多维的: 例如:

A

      A  B 
0  a  2  1 
1  a  2  1 

C

      A  B  C
0  a  1  0  0
0  b  1  0  0
0  b  1  0  0
1  a  0  1  1
2  c  0  0  1

在这种情况下,我期待:A + C为:

      A  B 
0  a  3  1 
1  a  2  2

从而保持MAIN数据帧A的结构。然后'二进制化'到

      A  B 
0  a  1  1 
1  a  1  1

3 个答案:

答案 0 :(得分:3)

IIUC:

In [56]: (d1 + d2 + d3).dropna(how='all').dropna(axis=1, how='all').ne(0).astype(np.int8)
Out[56]:
   A  B
0  1  1
1  1  1

<强>更新

In [129]: idx = A.index.intersection(C.index)

In [131]: (A.loc[idx] | B.loc[idx, A.columns]).gt(0).astype('int8')
Out[131]:
     A  B
0 a  1  1
1 a  1  1

答案 1 :(得分:3)

((dfA+dfB+dfC).reindex(index=dfA.index,columns=dfA.columns)>=1).astype(int)
Out[252]: 
   A  B
0  1  1
1  1  1

更新:

(A+C).reindex(A.index,columns=A.columns)
Out[297]: 
       A    B
0 a  3.0  1.0
1 a  2.0  2.0

答案 2 :(得分:2)

根据您给定结构的概括程度,

In [50]: df_a | df_b | df_c.loc[df_a.index, df_a.columns]
Out[50]:
   A  B
0  1  1
1  1  1