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


当前回答

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

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

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

其他回答

我认为concat是一个很好的方法。如果它们存在,它使用Series的name属性作为列(否则它只是简单地为它们编号):

In [1]: s1 = pd.Series([1, 2], index=['A', 'B'], name='s1')

In [2]: s2 = pd.Series([3, 4], index=['A', 'B'], name='s2')

In [3]: pd.concat([s1, s2], axis=1)
Out[3]:
   s1  s2
A   1   3
B   2   4

In [4]: pd.concat([s1, s2], axis=1).reset_index()
Out[4]:
  index  s1  s2
0     A   1   3
1     B   2   4

注意:这扩展到2系列以上。

请允许我回答这个问题。

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

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)

我使用pandas将我的numpy数组或iseries转换为一个数据帧,然后添加和添加额外的列键作为“预测”。如果你需要将数据帧转换回列表,则使用values.tolist()

output=pd.DataFrame(X_test)
output['prediction']=y_pred

list=output.values.tolist()     

如果两者有相同的索引,为什么不直接使用.to_frame呢?

> = v0.23

a.to_frame().join(b)

< v0.23

a.to_frame().join(b.to_frame())

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

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