pandas如何处理重复索引?

时间:2018-05-30 18:08:53

标签: python pandas

我有两个带有重复索引的pandas.Series,如下所示:

>> x = pandas.Series(range(5,10), index = ['a' for _ in xrange(5)])
>> y = pandas.Series(range(-5,-10, -1), index = ['a' for _ in xrange(5)])

看起来像这样

      x  y
   a  5 -5
   a  6 -6
   a  7 -7
   a  8 -8
   a  9 -9

然后在执行x+y时,我得到pandas.Series 0。似乎它遵循命令而不是索引,这可能是也可能不是预期的行为。

关于如何在pandas中处理这个问题以及这是否确实是预期的行为(即我应该总是期望相同的行为)?

编辑: 请注意,pandas根据索引进行元素总和,即:

>> pd.Series([1,2], index=['a', 'b']) + pd.Series([-1,-2], index=['b', 'a'])
a   -1
b    1

2 个答案:

答案 0 :(得分:1)

我认为当所有值都相同时,pandas会忽略索引。如果添加其他值,则会得到不同的结果:

x = pd.Series(range(5,10), index = ['a' for _ in range(4)]+['b'])
y = pd.Series(range(-5,-10, -1), index = ['b']+['a' for _ in range(4)])

x

a    5
a    6
a    7
a    8
b    9

y

b   -5
a   -6
a   -7
a   -8
a   -9

现在,您将获得以下结果:

x+y

a   -1
a   -2
a   -3
a   -4
a    0
a   -1
a   -2
a   -3
a    1
a    0
a   -1
a   -2
a    2
a    1
a    0
a   -1
b    4

重复索引会为'a'x中的y上的所有可能匹配产生额外的行。

答案 1 :(得分:0)

基于@ othman-nejjar的评论

您可以使用:

pd.Series([1,2], index=['a', 'b']).add(pd.Series([-1,-2], index=['b', 'a']))

输出:

a   -1
b    1
dtype: int64