不同长度的熊猫系列

时间:2018-06-17 06:07:01

标签: python python-3.x pandas

使用pandas concat函数可以创建如下系列:

In[230]pd.concat({'One':pd.Series(range(3)), 'Two':pd.Series(range(4))})
Out[230]: 
One  0    0
     1    1
     2    2
Two  0    0
     1    1
     2    2
     3    3
dtype: int64

不使用concat方法可以做同样的事吗? 我最好的方法是:

a = pd.Series(range(3),range(3))
b = pd.Series(range(4),range(4))
pd.Series([a,b],index=['One','Two'])

但它不一样,它输出:

One    0    0
       1    1
       2    2
dtype: int64

Two    0    0
       1    1
       2    2
       3    3
dtype: int64
dtype: object

3 个答案:

答案 0 :(得分:1)

这可以让您了解concat的用途。

a.index = pd.MultiIndex.from_tuples([('One', v) for v in a.index])
b.index = pd.MultiIndex.from_tuples([('Two', v) for v in b.index])

a.append(b)

One  0    0
     1    1
     2    2
Two  0    0
     1    1
     2    2
     3    3
dtype: int64

同样的事情是由pd.concat([a, b])实现的。

答案 1 :(得分:0)

如果您希望使用keys得到相同的输出,这是参数concat的工作,即:

pd.concat([a,b],keys=['One','Two'])

One  0    0
     1    1
     2    2
Two  0    0
     1    1
     2    2
     3    3
dtype: int64

答案 2 :(得分:-1)

这很好:

data = list(range(3)) + list(range(4))
index = MultiIndex(levels=[['One', 'Two'], [0, 1, 2, 3]],
                   labels=[[0, 0, 0, 1, 1, 1, 1], [0, 1, 2, 0, 1, 2, 3]])
pd.Series(data,index=index)