Python 添加多个索引和列重叠的数据帧

Python 添加多个索引和列重叠的数据帧,python,arrays,pandas,Python,Arrays,Pandas,pandas提供的组合多个数据帧并在重叠的行和列上执行值的数学加法的最佳方法是什么 我有一个很长的重叠数据帧列表,如下所示(仅显示其中的3个): 我可以通过以下方式组合这些,将重叠行和列的值相加,但这是一段很长的代码: >>> pd.DataFrame().add(df1, fill_value=0).add(df2, fill_value=0).add(df3, fill_value=0) xcode ycode n 17 1 0 18

pandas提供的组合多个数据帧并在重叠的行和列上执行值的数学加法的最佳方法是什么

我有一个很长的重叠数据帧列表,如下所示(仅显示其中的3个):

我可以通过以下方式组合这些,将重叠行和列的值相加,但这是一段很长的代码:

>>> 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
做同样的事情。但是熊猫图书馆提供了更好的方法吗


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

您应该能够使用标准python运算符:

sum([df1, df2, df3])


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

您是在询问数据帧的数学加法还是串联?抱歉,我想这不清楚,因为它是1和0:在本例中是数学加法,但如果有其他操作的方法,例如串联字符串,它也会很有用。但就这个问题而言,是的,addition.dataframes的索引并不完全相同。生成的数据帧最后填充了NaN.call.fillna()或.dropna()。我认为您没有理解我的问题(可能是我的错),这些问题没有产生所需的输出。请将您的输出与我的示例输出进行比较(抱歉,我知道它很长)。这并不能给出正确的答案。存在重叠的索引值,应在这些重叠处将这些值添加到一起。是否有一种快速的方法通过将重复的行添加到一起来跟进此解决方案…?抱歉,不匹配。我没有改变df1-3。我只是在结果中添加了注释,以便更容易看到重叠索引。啊,您希望添加具有重复索引的行。我编辑了答案来处理它。万岁!谢谢
df1 + df2 + df3
>>> 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