Pandas:将MultiIndex添加到仅包含1行的DataFrame

时间:2017-01-28 21:44:43

标签: python pandas

我有一个小数据框,例如:

enter image description here

和一个元组,例如:(Timestamp('2009-02-27 09:45:00'), 'bloomberg', 'Chicago PMI')

我想在DataFrame上创建一个多索引,以便它读取如下内容:

enter image description here

尝试构建MultiIndex时:
MI=pd.MultiIndex(index, (0,0,0))
 我遇到以下错误:
TypeError: Index(...) must be called with a collection of some kind, Timestamp('2009-02-27 09:45:00') was passed
 这似乎意味着不允许有一个带MultiIndex的1行DataFrame?

我正在迭代mysql数据库以检索那些1行DataFrame,然后将它们连接起来。尝试使用concat命令中的keys参数创建另一组问题,因此希望可以使用MultiIndex创建此1行DataFrame

下面是重建数据帧的数据:
import pandas as pd from pandas import Timestamp dikt={'actual': {0: '34.2'}, 'previous': {0: '33.3'}, 'forecast': {0: '33.0'}, 'importance': {0: 81.300799999999995}} pd.DataFrame(dikt, columns=['actual', 'forecast', 'previous', 'importance'])

2 个答案:

答案 0 :(得分:4)

设置

df = pd.DataFrame(
    [[34.2, 33., 33.3, 81.3008]],
    columns=['actual', 'forecast', 'previous', 'importance'])

tup = (pd.Timestamp('2009-02-27 09:45:00'), 'bloomberg', 'Chicago PMI')

使用pd.MultiIndex对象重新分配索引

df.index = pd.MultiIndex.from_tuples([tup])
df

enter image description here

使用列表列表重新分配索引

df.index = [[i] for i in tup]
df

enter image description here

使用rename 的完全可怕的方式 这很糟糕,因为它同样TUPLE每次行

df.rename(index=lambda x: tup)

enter image description here

答案 1 :(得分:1)

df.index = pd.MultiIndex(
    [[Timestamp('2009-02-27 09:45:00')], 
     ['bloomberg'], ['Chicago PMI']], [[0], [0], [0]], names = [
        'timestamp', 'agency', 'item'])
print(df)
                                         actual forecast previous  importance
timestamp           agency    item                                            
2009-02-27 09:45:00 bloomberg Chicago PMI   34.2     33.0     33.3     81.3008