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

时间:2019-12-05 21:57:52

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

(我进行了搜索,但找不到类似的问题;其他问题具有相同的索引,或者仅添加了两个数据框。)

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:-1)

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

$(document).ready(function() {
$('select.countForShowerCoins').on('change', function() {
  var sum = 0;

   $('select :selected').each(function() {
       sum += Number($(this).val() * 3);
   });

   if (sum > 0) {
       sum *= $('select[name=howManyNights]').val();
   }

$(".result").html(sum);
  });

});

sum([df1, df2, df3])