我有一个数据集,其中包含多索引列,第一级包含一年,分为四个季度。如何构造索引,以便每个季度有4套月?
我在堆栈溢出时发现了以下代码:
index = pd.MultiIndex.from_product([['S1', 'S2'], ['Start', 'Stop']])
print pd.DataFrame([pd.DataFrame(dic).unstack().values], columns=index)
提供以下输出:
S1 S2
Start Stop Start Stop
0 2013-11-12 2013-11-13 2013-11-15 2013-11-17
但是,它不能解决我在一年的每个季度下拥有不同的月份集的要求。
我的数据如下:
2015
Q1 Q2 Q3 Q4
Country jan Feb March Apr May Jun July Aug Sep Oct Nov Dec
India 45 54 34 34 45 45 43 45 67 45 56 56
Canada 44 34 12 32 35 45 43 41 60 43 55 21
我希望将数据集的相同结构输入到熊猫中,每个季度下都有特定的月份集。我该怎么办?
答案 0 :(得分:0)
您还可以通过其他几种方式创建MultiIndex
。其中之一(如果您具有复杂的结构很有用)是从一组明确的元组构造它,其中每个元组都是一个层次列。下面,我首先创建(year, quarter, month)
形式的所有所需元组,从中创建一个MultiIndex
,然后将其分配为数据框的列。
import pandas as pd
year = 2015
months = [
("Jan", "Feb", "Mar"),
("Apr", "May", "Jun"),
("Jul", "Aug", "Sep"),
("Oct", "Nov", "Dec"),
]
tuples = [(year, f"Q{i + 1}", month) for i in range(4) for month in months[i]]
multi_index = pd.MultiIndex.from_tuples(tuples)
data = [
[45, 54, 34, 34, 45, 45, 43, 45, 67, 45, 56, 56],
[44, 34, 12, 32, 35, 45, 43, 41, 60, 43, 55, 21],
]
df = pd.DataFrame(data, index=["India", "Canada"], columns=multi_index)
df
# 2015
# Q1 Q2 Q3 Q4
# Jan FebMar Apr May Jun Jul Aug Sep Oct Nov Dec
# India 45 54 34 34 45 45 43 45 67 45 56 56
# Canada 44 34 12 32 35 45 43 41 60 43 55 21