将两个列表添加到多索引的熊猫系列中

时间:2017-09-24 21:14:33

标签: python pandas

假设我有两个使用列表理解构建的列表ab。它们的长度相等。例如:a = [1, 2, 3]b = ['a', 'b', 'c']

现在,我想要一个带有这些列表数据的pandas MultiIndex系列。 E.g:

2017-03-31  num    1
            lab    a
2017-04-30  num    2
            lab    b
2017-05-31  num    3
            lab    c

现在,我这样做如下:

from itertools import chain
daterange = pd.date_range('2017-03', '2017-06', freq='M')
index = pd.MultiIndex.from_product([daterange, ['num', 'lab']])
series = pd.Series(list(chain(*zip(a, b))), index=index)

这样做很好,但由于某种原因,它对我来说感觉“难看”。首先,我很失望我需要添加显式list语句,因为pandas似乎将链对象解释为标量而不是迭代器,但我也不喜欢为此导入itertools。

那么,有更好的方法吗?谢谢!

1 个答案:

答案 0 :(得分:1)

您可以将数据放在一起作为DataFrame,然后将unstack放入一个系列中,该系列应该可以为您提供所需的形状:

daterange = pd.date_range('2017-03', '2017-06', freq='M')
df = pd.DataFrame([a,b], index=['num', 'lab'], columns=daterange)

这使得2x3数据帧:

print(df)

    2017-03-31 2017-04-30 2017-05-31
num          1          2          3
lab          a          b          c

series = df.unstack()

这会将DataFrame改为Series,并将MultiIndex作为索引

print(series)

2017-03-31  num    1
            lab    a
2017-04-30  num    2
            lab    b
2017-05-31  num    3
            lab    c
相关问题