获取两个列表到一个多索引熊猫系列

获取两个列表到一个多索引熊猫系列

问题描述:

说我有两个列表ab建立与列表理解。他们有相同的长度。例如:a = [1, 2, 3]b = ['a', 'b', 'c']获取两个列表到一个多索引熊猫系列

现在,我想有一个熊猫MultiIndex系列与这些列表中的数据。例如: -

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语句,因为熊猫似乎将链对象解释为标量而不是迭代器,但我也不喜欢为此导入itertools。

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

你可以把你的数据一起作为一个数据帧,然后unstack成一系列的应该给你你想要的形状:

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

这使得2×3的数据帧:

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 
+0

啊!这似乎确实有诀窍。我的例子似乎有点慢(实际情况当然比我为我的问题推导出的例子更复杂和大),但它绝对更清晰。非常感谢! –