我有以下数据框:
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
答案 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