pandas 提供的组合多个数据帧并在重叠的行和列处执行值的数学加法的最佳方法是什么?
我有一长串重叠的数据帧,如下所示(仅显示其中 3 个):
>>> df1
xcode ycode
n
17 1 0
18 1 0
19 1 0
20 1 0
21 1 0
389 1 0
390 1 0
391 1 0
392 1 0
393 1 0
394 1 0
>>> df2
xcode ycode
n
58 1 0
59 1 0
60 1 0
61 1 0
62 1 0
610 1 0
611 1 0
612 1 0
613 1 0
614 1 0
615 1 0
>>> df3
xcode ycode
n
21 0 1
22 0 1
23 0 1
24 0 1
25 0 1
26 0 1
27 0 1
28 0 1
29 0 1
30 0 1
31 0 1
32 0 1
33 0 1
34 0 1
35 0 1
36 0 1
37 0 1
38 0 1
39 0 1
40 0 1
41 0 1
42 0 1
43 0 1
44 0 1
45 0 1
46 0 1
47 0 1
48 0 1
49 0 1
50 0 1
51 0 1
52 0 1
53 0 1
54 0 1
55 0 1
56 0 1
57 0 1
58 0 1
我可以通过以下方式组合这些,将重叠行和列处的值加在一起,但代码很长:
>>> pd.DataFrame().add(df1, fill_value=0).add(df2, fill_value=0).add(df3, fill_value=0)
xcode ycode
n
17 1 0
18 1 0
19 1 0
20 1 0
21 1 1 # Note the overlapping index
389 1 0
390 1 0
391 1 0
392 1 0
393 1 0
394 1 0
58 1 1 # Note the overlapping index
59 1 0
60 1 0
61 1 0
62 1 0
610 1 0
611 1 0
612 1 0
613 1 0
614 1 0
615 1 0
22 0 1
23 0 1
24 0 1
25 0 1
26 0 1
27 0 1
28 0 1
29 0 1
30 0 1
31 0 1
32 0 1
33 0 1
34 0 1
35 0 1
36 0 1
37 0 1
38 0 1
39 0 1
40 0 1
41 0 1
42 0 1
43 0 1
44 0 1
45 0 1
46 0 1
47 0 1
48 0 1
49 0 1
50 0 1
51 0 1
52 0 1
53 0 1
54 0 1
55 0 1
56 0 1
57 0 1
我可以使用循环或reduce
来做同样的事情。但是 pandas 库是否提供了更好的方法来做到这一点?
(我进行了搜索,但找不到类似的问题;其他问题要么具有相同的索引,要么只添加了几个数据帧。)
最佳答案
使用 pd.concat
和 sum
以及 level=0
。
>>> pd.concat([df1, df2, df3]).sum(level=0)
xcode ycode
n
17 1 0
18 1 0
19 1 0
20 1 0
21 1 1
389 1 0
390 1 0
391 1 0
392 1 0
393 1 0
394 1 0
58 1 1
59 1 0
60 1 0
61 1 0
62 1 0
610 1 0
611 1 0
612 1 0
613 1 0
614 1 0
615 1 0
22 0 1
23 0 1
24 0 1
25 0 1
26 0 1
27 0 1
28 0 1
29 0 1
30 0 1
31 0 1
32 0 1
33 0 1
34 0 1
35 0 1
36 0 1
37 0 1
38 0 1
39 0 1
40 0 1
41 0 1
42 0 1
43 0 1
44 0 1
45 0 1
46 0 1
47 0 1
48 0 1
49 0 1
50 0 1
51 0 1
52 0 1
53 0 1
54 0 1
55 0 1
56 0 1
57 0 1
关于python - 添加许多具有重叠索引和列的 pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59203866/