亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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條經驗 獲得超13個贊

您可以將數據存儲在字典的字典中,而不是填充空的 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 關注
  • 178 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號