簡體   English   中英

如何僅重置 pandas 中的第一級 MultiIndex

[英]How to reset only first level of MultiIndex in pandas

我有一個DataFrame如下所示:

ex = pd.DataFrame({'speed': {(1252540, 0): 0.0,
  (1252540, 1): 0.0,    
  (1252540, 2): 0.0,
  (1252541, 0): 0.0,
  (1252541, 1): 0.0,
  (1252541, 2): 0.0,
  (1252543, 0): 0.0,
  (1252543, 1): 0.0,
  (1252543, 2): 0.0,
  (1252544, 0): 0.0,
  (1252544, 1): 0.0,
  (1252544, 2): 0.0,
  (1252545, 0): 0.0,
  (1252545, 1): 0.0,
  (1252545, 2): 0.0,
  (1252546, 3): 0.0,
  (1252546, 4): 0.0,
  (1252546, 5): 0.0,
  (1252547, 3): 0.0,
  (1252547, 4): 0.0},
 'unknown': {(1252540, 0): np.nan,
  (1252540, 1): np.nan,
  (1252540, 2): np.nan,
  (1252541, 0): np.nan,
  (1252541, 1): np.nan,
  (1252541, 2): np.nan,
  (1252543, 0): np.nan,
  (1252543, 1): np.nan,
  (1252543, 2): np.nan,
  (1252544, 0): np.nan,
  (1252544, 1): np.nan,
  (1252544, 2): np.nan,
  (1252545, 0): np.nan,
  (1252545, 1): np.nan,
  (1252545, 2): np.nan,
  (1252546, 3): np.nan,
  (1252546, 4): np.nan,
  (1252546, 5): np.nan,
  (1252547, 3): np.nan,
  (1252547, 4): np.nan}})
ex.index.names = ['id', 'id2']

我想將MultiIndex的第一級設置為(0, 0, 0, 1, 1, 1, 2, 2, 2, ...) ,以便為 0 級中的每個新值分配下一個 integer。 通常,我可以通過以下方式進行簡單的轉變:

idx = ex.index.get_level_values(0).to_numeric()
idx -= idx.min()

但正如您所看到的,原始索引中可能缺少某些值( 1252542 ),而新索引中不應該有任何差距。 我怎樣才能做到這一點? 如果我可以保留映射(如1252540 -> 0, 1252541 -> 1, 1252543 -> 2... ),可能是 dict 的形式,那很好,但這不是強制性的。

讓我知道這是否有幫助:

indices = ex.index.get_level_values('id').unique().sort_values()

dict = {}

for key,value in (zip(indices,range(0,len(indices)))):
    dict[key] = value

ex.rename(index=dict)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM