【发布时间】:2020-08-14 22:35:39
【问题描述】:
我想使用pd.MultiIndex 将本地数据帧集的摘要存储到“元数据帧”中。
基本上,行轴有两个层次,列轴也有。 在管理数据帧集的类中,我将这个“元数据帧”定义为类变量。
import pandas as pd
row_axis = pd.MultiIndex(levels=[[],[]], codes=[[],[]], names=['Data', 'Period'])
column_axis = pd.MultiIndex(levels=[[],[]], codes=[[],[]], names=['Data', 'Extrema'])
MD = pd.DataFrame(index=row_axis, columns=column_axis)
它似乎有效。
MD.index
>>> MultiIndex([], names=['Data', 'Period'])
MD.columns
>>> MultiIndex([], names=['Data', 'Extrema'])
现在,每次我处理一个单独的 DataFrame id 时,我都想相应地更新这个“Meta DataFrame”。 id 有一个 DateTimeIndex,周期为 '5m'。
id.index[0]
>>> Timestamp('2020-01-01 08:00:00')
id.index[-1]
>>> Timestamp('2020-01-02 08:00:00')
例如,我想在 MD 中保留其第一个和最后一个索引值。
MD.loc[[('id', '5m')],[('Timestamp', 'First')]] = id.index[0]
MD.loc[[('id', '5m')],[('Timestamp', 'Last')]] = id.index[-1]
这不起作用,我收到以下错误消息:
TypeError: unhashable type: 'list'
最后,我希望在 MD 中获得以下类型的信息(我还有其他不同时期的 id DataFrames):
Timestamp
First Last
id 5m 2020-01-01 08:00:00 2020-01-02 08:00:00
10m 2020-01-05 08:00:00 2020-01-06 18:00:00
最终,我还将保留id 中某些列的最小值和最大值。
例如,如果 id 有一个“温度”列。
Timestamp Temperature
First Last Min Max
id 5m 2020-01-01 08:00:00 2020-01-02 08:00:00 -2.5 10
10m 2020-01-05 08:00:00 2020-01-06 18:00:00 4 15
这些值会在我记录id的时候记录下来。
我知道每个单元格初始化一个 DataFrame 单元格的时间效率不高,但不会经常这样做。
此外,我看不到如何在 Dict 中管理这种信息组织,这就是为什么我正在考虑使用多级 DataFrame 来做这件事的原因。 然后我会将其转储到 csv 文件中以存储这些“元数据”。
请问,在 MD 中初始化这些值的正确方法是什么?
感谢您的帮助! 最好的,
【问题讨论】:
-
MD.loc[('id','5m'), ('Timestamp','First')] = id.index[0]? -
谢谢,但它对我不起作用。对你起作用吗?我有一条
ValueError: Names should be list-like for a MultiIndex消息。
标签: python pandas dataframe multi-index