python - 替代 set_level_values

标签 python pandas

我有一系列的形式

  groupid     period    
        1    2011-02     5
        1    2011-03     6
        1    2011-04     7
        1    2011-05     8

我想将句点向后移动一个句点。我可以使用

创建新索引
df.index.get_level_values('period').shift(-1)

但后来我不知道如何强制他们返回。set_level_values() 不存在。如何覆盖 MultiIndex 的第二级?

最佳答案

您可以使用 MultiIndex.set_levels :

print (df.index)
MultiIndex(levels=[[1], [2011-02, 2011-03, 2011-04, 2011-05]],
           labels=[[0, 0, 0, 0], [0, 1, 2, 3]],
           names=['groupid', 'period'])

print (df.index.get_level_values('period').shift(-1))
PeriodIndex(['2011-01', '2011-02', '2011-03', '2011-04'], 
            dtype='period[M]', name='period', freq='M')

df.index.set_levels([df.index.get_level_values('groupid'), 
                     df.index.get_level_values('period').shift(-1)], inplace=True)
print (df)
groupid  period 
1        2011-01    5
         2011-02    6
         2011-03    7
         2011-04    8
Name: val, dtype: int64

关于python - 替代 set_level_values,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41826893/

相关文章:

python - 在 python、go 或 julia 中快速直接访问像素

python - 如何更改Python中for循环的计数器?

python - 如何使用自定义日历进行 timedelta 计算?

python - 如何通过 Pandas 中的方法/表达式压平 MultiIndex?

python - 如何使用列中的 x 轴标签在 pandas 中生成直方图?

python - 在Windows 10中Anaconda下安装ta-lib

python - 绘制 pandas 中随时间变化的行数

Python:对象比字典更需要内存吗?

python - 如何使用 pandas 更改列值和排序?

Python pandas 创建一个函数来计算 n 列行的平均值