添加许多具有重叠索引和列的熊猫数据帧



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做同样的事情。但是熊猫图书馆是否提供了更好的方法来做到这一点?

(我搜索了一下,但找不到类似的问题;其他问题要么具有相同的索引,要么只添加了几个数据帧。

pd.concatsumlevel=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运算符:

sum([df1, df2, df3])

df1 + df2 + df3

最新更新