2017-09-24 152 views
0

說我有兩個列表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。

那麼,有沒有更好的方法?謝謝!

回答

1

你可以把你的數據一起作爲一個數據幀,然後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

啊!這似乎確實有訣竅。我的例子似乎有點慢(實際情況當然比我爲我的問題推導出的例子更復雜和大),但它絕對更清晰。非常感謝! –