转换为Pandas MultiIndex

时间:2017-08-31 21:02:37

标签: python python-2.7 pandas

我有一个格式为的数据框:

     SpeciesName    0
0        A          [[Year: 1, Quantity: 2],[Year: 3, Quantity: 4...]]
1        B          [[Year: 1, Quantity: 7],[Year: 2, Quantity: 15...]]
2        C          [[Year: 2, Quantity: 9],[Year: 4, Quantity: 13...]]

我正在尝试创建一个使用SpeciesName和year作为索引的MultiIndex:

SpeciesName  Year 
     A        1   Data
              2   Data
     B        1   Data
              2   Data

我无法让pandas.MultiIndex(..)工作,我尝试迭代数据集并手动创建一个新对象并不是很有成效。任何见解都将非常感谢!

1 个答案:

答案 0 :(得分:0)

我假设你的数据是字典列表......因为如果我不这样做,你写的内容没有任何意义,除非它们是字符串而且我不想解析字符串

df = pd.DataFrame([
    ['A', [dict(Year=1, Quantity=2), dict(Year=3, Quantity=4)]],
    ['B', [dict(Year=1, Quantity=7), dict(Year=2, Quantity=15)]],
    ['C', [dict(Year=2, Quantity=9), dict(Year=4, Quantity=13)]]
], columns=['SpeciesName', 0])

df

  SpeciesName                                                          0
0           A   [{'Year': 1, 'Quantity': 2}, {'Year': 3, 'Quantity': 4}]
1           B  [{'Year': 1, 'Quantity': 7}, {'Year': 2, 'Quantity': 15}]
2           C  [{'Year': 2, 'Quantity': 9}, {'Year': 4, 'Quantity': 13}]

然后解决方案明显

pd.DataFrame.from_records(
    *zip(*(
        [d, s]
        for s, l in zip(
            df['SpeciesName'], df[0].values.tolist())
        for d in l
    ))
).set_index('Year', append=True)

        Quantity
  Year          
A 1            2
  3            4
B 1            7
  2           15
C 2            9
  4           13