Pandas:扩展序列索引以包含范围内所有值
我有一个 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
抱歉,情况有点尴尬,不过我在这里读到了一些关于如何处理这种情况的建议,所以决定给自己的问题提供一个答案。
我在这里阅读了文档 ,我想要实现的功能有一种方法是这样的:
>>> x.combine_first(y)
0 0
1 0
2 1
3 0
4 0
5 2
6 3
7 0
8 4
dtype: float64
注意,上面的内容,
>>> y = pd.Series([0 for i in range(0,8)])
20
你需要的是一个叫做 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