我有两个具有相同(不连续)指标的级数s1和s2。我如何结合s1和s2是一个DataFrame的两列,并保持一个索引作为第三列?


当前回答

请允许我回答这个问题。

将序列转换为数据帧的基本原理是理解这一点

1. 在概念层面上,数据帧中的每一列都是一个系列。

2. 并且,每个列名都是映射到一个序列的键名。

如果你记住了以上两个概念,你可以想到很多方法将序列转换为数据帧。 一个简单的解决方案是这样的:

在这里创建两个系列

import pandas as pd

series_1 = pd.Series(list(range(10)))

series_2 = pd.Series(list(range(20,30)))

创建一个空的数据帧,只需要列的名称

df = pd.DataFrame(columns = ['Column_name#1', 'Column_name#1'])

利用映射概念将序列值放入数据帧中

df['Column_name#1'] = series_1

df['Column_name#2'] = series_2

现在检查结果

df.head(5)

其他回答

示例代码:

a = pd.Series([1,2,3,4], index=[7,2,8,9])
b = pd.Series([5,6,7,8], index=[7,2,8,9])
data = pd.DataFrame({'a': a,'b':b, 'idx_col':a.index})

Pandas允许您从字典中创建一个DataFrame,其值为Series,键为列名。当它找到一个Series作为值时,它使用Series索引作为DataFrame索引的一部分。这种数据对齐是Pandas的主要优势之一。因此,除非您有其他需要,否则新创建的DataFrame具有重复的值。在上面的例子中,data['idx_col']与data.index拥有相同的数据。

我不确定我完全理解你的问题,但这是你想做的吗?

pd.DataFrame(data=dict(s1=s1, s2=s2), index=s1.index)

(指数= s1。这里甚至不需要索引)

基于join()的解决方案的简化:

df = a.to_frame().join(b)

请允许我回答这个问题。

将序列转换为数据帧的基本原理是理解这一点

1. 在概念层面上,数据帧中的每一列都是一个系列。

2. 并且,每个列名都是映射到一个序列的键名。

如果你记住了以上两个概念,你可以想到很多方法将序列转换为数据帧。 一个简单的解决方案是这样的:

在这里创建两个系列

import pandas as pd

series_1 = pd.Series(list(range(10)))

series_2 = pd.Series(list(range(20,30)))

创建一个空的数据帧,只需要列的名称

df = pd.DataFrame(columns = ['Column_name#1', 'Column_name#1'])

利用映射概念将序列值放入数据帧中

df['Column_name#1'] = series_1

df['Column_name#2'] = series_2

现在检查结果

df.head(5)

熊猫将自动对齐这些传递的系列,并创建联合索引 它们在这里是一样的。Reset_index将索引移动到一列。

In [2]: s1 = Series(randn(5),index=[1,2,4,5,6])

In [4]: s2 = Series(randn(5),index=[1,2,4,5,6])

In [8]: DataFrame(dict(s1 = s1, s2 = s2)).reset_index()
Out[8]: 
   index        s1        s2
0      1 -0.176143  0.128635
1      2 -1.286470  0.908497
2      4 -0.995881  0.528050
3      5  0.402241  0.458870
4      6  0.380457  0.072251