Pandas:扩展系列的索引,使其包含范围内的所有值

时间:2014-10-30 12:20:30

标签: python pandas

我有一个看起来像这样的熊猫系列:

>>> x.sort_index()
2       1
5       2
6       3
8       4

我想填写这个系列,以便"失踪"表示索引行,用0填充数据值。

因此,当我列出新系列时,它看起来像这样:

>>> z.sort_index()
1       0
2       1
3       0
4       0
5       2
6       3
7       0
8       4

我试过创建一个"虚拟"系列

>>> y = pd.Series([0 for i in range(0,8)])
0    0
1    0
2    0
3    0
4    0
5    0
6    0
7    0

然后将它们连在一起 - 但结果是:

>>> pd.concat([x,z],axis=0)
2    1
5    2
6    3
8    4
0    0
1    0
2    0
3    0
4    0
5    0
6    0
7    0

或者

>>> pd.concat([x,z],axis=1)
    0   1
0 NaN   0
1 NaN   0
2   1   0
3 NaN   0
4 NaN   0
5   2   0
6   3   0
7 NaN   0
8   4 NaN

这两个都不是我上面列出的目标结构。

我可以尝试在axis = 1版本上执行一些算术,并获取第1列和第2列的总和,但我正在寻找一个更整洁的单行版本 - 这样的索引填充/清理操作是否存在,如果是的话,它是什么?

2 个答案:

答案 0 :(得分:10)

你想要的是reindex。首先根据需要创建索引(在这种情况下只是一个范围),然后使用它重新索引:

In [64]: x = pd.Series([1,2,3,4], index=[2,5,6,8])

In [65]: x
Out[65]:
2    1
5    2
6    3
8    4
dtype: int64

In [66]: x.reindex(range(9), fill_value=0)
Out[66]:
0    0
1    0
2    1
3    0
4    0
5    2
6    3
7    0
8    4
dtype: int64

答案 1 :(得分:0)

抱歉 - 有点尴尬的情况,但在这种情况下阅读了here该怎么做,我正在回答我自己的问题。

我阅读了文档here - 我正在寻找的一种方法是:

>>> x.combine_first(y)
0    0
1    0
2    1
3    0
4    0
5    2
6    3
7    0
8    4
dtype: float64

N.B。在上面,

>>> y = pd.Series([0 for i in range(0,8)])