正如问题所提到的,我有一个大熊猫(版本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
。我认为这意味着我尝试做的事情是不可能的,我应该回到使用一个简单的整数索引列。但是,在我放弃之前,我想知道在这个过程中是否有一些我遗漏的东西。
答案 0 :(得分:1)
您可以像这样更改索引值:
df.index += x