我有两个系列。一个看起来如下:
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
答案 0 :(得分:0)
Pandas Series和DataFrames Indexes可以通过赋值更改。
因此,如果您的两个系列被称为s1
和s2
,那么
s2.index = s1.index
将s1
的索引分配给s2
。请注意,两个系列必须具有相同的长度,否则将引发ValueError
。
或者,要使用s1
和s2
形成数据框,您可以使用
df = pd.DataFrame({'s1': s1.values, 's2': s2.values}, index=s1.index)
请注意,s1.values
会返回NumPy数组s1
值,而不包含索引。
要构建此DataFrame,请务必在此处使用.values
,以便Pandas不会尝试根据各自(和不同的!)索引对齐s1
和s2
的值。
为了说明差异,请考虑:
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
根据各自的索引对齐s1
和s2
的值。 index=s1.index
裁剪行,以便仅包含来自s1.index
的索引标签的值。由于s2
没有这些索引标签的值,因此值将填充NaN
s。