如何仅重置熊猫的MultiIndex的第一级

时间:2019-11-17 10:09:25

标签: python pandas multi-index

我有一个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中的每个新值都分配有下一个整数。通常,我可以使用以下方法进行简单的移位:

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

但是如您所见,原始索引中可能缺少一些值(1252542),而新索引中不应有任何差距。我该怎么做?如果我可以保留dict形式的映射(例如1252540 -> 0, 1252541 -> 1, 1252543 -> 2...),那很好,但是不是强制性的。

1 个答案:

答案 0 :(得分:1)

让我知道这是否有帮助:

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)
相关问题