Pandas 用大于和小于索引重新索引数据帧

Pandas reindex dataframe with greater and less than index

我有一个数据框 df1 作为:

idx Col1
2   v2
3   v3
4   v4
5   v5

我想为值 df1.reindex([1, 2, 3, 4, 5, 6]) 重新索引 df1 以获得以下内容:

idx Col1
1   v2
2   v2
3   v3
4   v4
5   v5
6   v5

所有小于 2 的值都获得索引 2 的值,所有大于 5 的值都从数据帧获得索引 5 的值 df1

你可以试试.ffill() + .bfill(),如下:

df1 = df1.reindex([1, 2, 3, 4, 5, 6]).ffill().bfill()

数据输入:

df1 = pd.DataFrame({'Col1': {2: 'v2', 3: 'v3', 4: 'v4', 5: 'v5'}}).rename_axis(index='idx')

    Col1
idx     
2     v2
3     v3
4     v4
5     v5

结果:

print(df1)

    Col1
idx     
1     v2
2     v2
3     v3
4     v4
5     v5
6     v5

编辑:

如果您的重新索引索引不按顺序,例如[2, 1, 4, 6, 5, 3] 您可以先 .sort_index() 然后 .ffill() + .bfill() 然后重新索引,如下所示:

df1.reindex([2, 1, 4, 6, 5, 3]).sort_index().ffill().bfill().reindex([2, 1, 4, 6, 5, 3])

结果:

    Col1
idx     
2     v2
1     v2
4     v4
6     v5
5     v5
3     v3

让我们在这里尝试注意我正在使用 nearestsorted

out = df.reindex(sorted([1, 2, 3, 4, 5, 6]),method='nearest')
Out[105]: 
    Col1
idx     
1     v2
2     v2
3     v3
4     v4
5     v5
6     v5