我想把本地一组DataFrames的摘要存储到一个 "元DataFrame "中,用 pd.MultiIndex
.
基本上,行轴有两层,列轴也有两层,在管理DataFrames集合的类中,我定义了一个类变量 "Meta DataFrame"。
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
有一个周期为'5m'的DateTimeIndex。
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中初始化这些值的正确方法是什么?
我感谢你的帮助!Bests。
你可以将数据存储在一个dict的dict中,而不是填充一个空的DataFrame。一个MultiIndex使用 tuples
作为索引值,所以我们把每个字典的键做成元组。
外的Dictionary以列MultiIndex元组为键,而值则是另一个以行MultiIndex元组为键,以单元格中的值为值的Dictionary。
d = {('Score', 'Min'): {('id1', '5m'): 72, ('id1', '10m'): -18},
('Timestamp', 'First'): {('id1', '5m'): 1, ('id1', '10m'): 2},
('Timestamp', 'Last'): {('id1', '5m'): 10, ('id1', '10m'): 20}}
# | | |
# Column MultiIndex Row Multi Cell Value
# Label Label
pd.DataFrame(d)
Score Timestamp
Min First Last
id1 5m 72 1 10
10m -18 2 20
创建该 dict
这将取决于你如何获得这些值。你可以 扩写 update