为了账号安全,请及时绑定邮箱和手机立即绑定

Python / Pandas:如何创建一个多索引的空 DataFrame,然后开始填充它?

Python / Pandas:如何创建一个多索引的空 DataFrame,然后开始填充它?

鸿蒙传说 2022-11-01 15:53:07
我想使用pd.MultiIndex.基本上,行轴有两个级别,列轴也有。在管理数据帧集的类中,我将这个“元数据帧”定义为类变量。import pandas as pdrow_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'])现在,每次我处理一个单独的 DataFrameid时,我都想相应地更新这个“元数据帧”。id有一个日期时间索引,周期为“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不同时期的 DataFrame):           Timestamp           First                   Lastid    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    Maxid    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中初始化这些值的正确方法是什么?
查看完整描述

1 回答

?
红颜莎娜

TA贡献1842条经验 获得超12个赞

您可以将数据存储在字典的字典中,而不是填充空的 DataFrame。MultiIndextuples用作索引值,因此我们制作每个字典元组的键。


外部字典使用列 MultiIndex 元组作为键,值是另一个字典,其中行 MultiIndex 元组作为键,单元格中的值作为值。


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


查看完整回答
反对 回复 2022-11-01
  • 1 回答
  • 0 关注
  • 94 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信