如何从另一个系列设置系列的索引

时间:2017-11-24 21:13:34

标签: python-3.x

我有两个系列。一个看起来如下:

2016-01-04 00:00:00+00:00    194.972
2016-01-05 00:00:00+00:00    195.379
2016-01-06 00:00:00+00:00    192.838
2016-01-07 00:00:00+00:00    188.220

日期是其索引。

另一系列看起来如下:

0     186.679615
1     186.409242
2     185.783922
3     185.598504

我想要的是用第一个系列的索引设置/替换第二个系列的索引,所以它看起来如下:

2016-01-04 00:00:00+00:00    186.679615
2016-01-05 00:00:00+00:00    186.409242
2016-01-06 00:00:00+00:00    185.783922 
2016-01-07 00:00:00+00:00    185.598504 

如果这是不可能的,也许我可以将第二个系列中的列添加到第一个系列中,如下所示:

2016-01-04 00:00:00+00:00    194.972  186.679615
2016-01-05 00:00:00+00:00    195.379  186.409242
2016-01-06 00:00:00+00:00    192.838  185.783922 
2016-01-07 00:00:00+00:00    188.220  185.598504 

1 个答案:

答案 0 :(得分:0)

Pandas Series和DataFrames Indexes可以通过赋值更改。 因此,如果您的两个系列被称为s1s2,那么

s2.index = s1.index

s1的索引分配给s2。请注意,两个系列必须具有相同的长度,否则将引发ValueError

或者,要使用s1s2形成数据框,您可以使用

df = pd.DataFrame({'s1': s1.values, 's2': s2.values}, index=s1.index)

请注意,s1.values会返回NumPy数组s1,而不包含索引。 要构建此DataFrame,请务必在此处使用.values,以便Pandas不会尝试根据各自(和不同的!)索引对齐s1s2的值。

为了说明差异,请考虑:

import pandas as pd
s1 = pd.Series(range(4))
s2 = pd.Series(range(4), index=list('ABCD'))
df = pd.DataFrame({'s1': s1.values, 's2': s2.values}, index=s1.index)
#    s1  s2
# 0   0   0
# 1   1   1
# 2   2   2
# 3   3   3

df2 = pd.DataFrame({'s1': s1, 's2': s2}, index=s1.index)
#    s1  s2
# 0   0 NaN
# 1   1 NaN
# 2   2 NaN
# 3   3 NaN

在第二个示例中,pd.DataFrame根据各自的索引对齐s1s2的值。 index=s1.index裁剪行,以便仅包含来自s1.index的索引标签的值。由于s2没有这些索引标签的值,因此值将填充NaN s。