我有一个小数据框,例如:
和一个元组,例如:(Timestamp('2009-02-27 09:45:00'), 'bloomberg', 'Chicago PMI')
我想在DataFrame上创建一个多索引,以便它读取如下内容:
尝试构建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'])
答案 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
使用列表列表重新分配索引
df.index = [[i] for i in tup]
df
使用rename
的完全可怕的方式
这很糟糕,因为它同样TUPLE
每次行
df.rename(index=lambda x: tup)
答案 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