使用Float64Index时,如何移动DataFrame的索引?

时间:2016-04-19 21:18:26

标签: python pandas

正如问题所提到的,我有一个大熊猫(版本0.18.0)数据框,其中包含几列1D数据(模拟光谱)。

示例数据集如下所示:

Photon Energy (eV),  Spin_Up (a.u.),  Spin_Down (a.u.),       Difference  
1.520040,                  0.000000,           0.00000,         0.000000   
1.520515,                  0.000000,           0.00000,         0.000000   
1.520990,                  0.000000,           0.00000,         0.000000   
1.521465,                  9.742188,           0.00000,         9.742188   
1.521940,                 35.432140,          24.41665,        11.015490   
1.522415,                 69.708160,          99.48898,       -29.780820   
1.522890,                140.897400,         198.71710,       -57.819700   
1.523365,                369.593200,         401.61710,       -32.023900   
1.523840,               1688.481000,        1034.93300,       653.548000   
1.524315,               1822.535000,        4645.04600,     -2822.511000   
1.524790,               1284.102000,        5457.34800,     -4173.246000   

数据直接从CSV导入(pd.read_csv('sample.csv', index_col='Photon Energy (eV)'),三个导入的列是索引行(具有六位小数精度的光子能量)和两个电子群(整数值)。

现在,我想将索引列移动~2.5meV(对应于200行)。

我已通过以下方式拉出最高点:

abs_max = df.loc[1.52:1.53,["Sum"]].idxmax()
shift_idx = df.index.get_loc(abs_max[0])
shift_amt = int(shift_idx - spdf.index.get_loc(1.515005))

然后尝试使用df.shift(periods=shift_amt)应用转换(我意识到int()上的shift_amt是不必要的,只是试图覆盖所有基础)。这似乎没有效果(索引列未被移位)。尝试在freq函数中将值应用于shift()没有任何区别。当我使用df.index.shift()尝试相同的操作时,我收到了错误NotImplementedError: Not supported for type Float64Index。我认为这意味着我尝试做的事情是不可能的,我应该回到使用一个简单的整数索引列。但是,在我放弃之前,我想知道在这个过程中是否有一些我遗漏的东西。

1 个答案:

答案 0 :(得分:1)

您可以像这样更改索引值:

df.index += x