获取两个列表到一个多索引熊猫系列
问题描述:
说我有两个列表a
和b
建立与列表理解。他们有相同的长度。例如: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
啊!这似乎确实有诀窍。我的例子似乎有点慢(实际情况当然比我为我的问题推导出的例子更复杂和大),但它绝对更清晰。非常感谢! –