python重新索引方法=' ffill'

时间:2017-11-20 09:29:22

标签: python pandas

我写了以下代码:

frame1=DataFrame(np.arange(9).reshape(3,3), index=['a','b','c'], columns=['Ohio','Texas','California']), states= ['Texas','Utah','California']

然后,
frame1.reindex(index=['a','b','c','d'],method='ffill',columns=states)

它会返回一个错误,说明' index must be monotonic increasing or decreasing'。我已经阅读了this question的答案。 然后我把它重写为
frame1.reindex(index=['a','b','c','d'],method='ffill',columns=states.sort())
结果是:

    Ohio    Texas   California
a   0   1   2
b   3   4   5
c   6   7   8
d   6   7   8 

如您所见,列未按预期更改。为什么这里的列不会改变,虽然我使用reindex函数?

2 个答案:

答案 0 :(得分:1)

由于链接问题的答案表明索引应该在重建索引之前进行排序,在这种情况下,轴0的索引是排序的,而不是轴1(列)。因此,在重建索引之前对frame1中的列进行排序,这就是为什么列没有变化的原因,即

frame1.sort_index(axis=1).reindex(index=['a','b','c','d'],method='ffill',columns=sorted(states))

输出:

 California  Texas  Utah
a           2      1     1
b           5      4     4
c           8      7     7
d           8      7     7

希望这清楚你的怀疑。

答案 1 :(得分:0)

实际上,您正在做两件事(添加行和排序列)。为什么有必要一步到位?如果分为两个步骤,您可以实现您想要的目标:

import pandas as pd
import numpy as np

frame1 = pd.DataFrame(np.arange(9).reshape(3,3), index=['a','b','c'], columns=['Ohio','Texas','California'])
states = ['Texas','Utah','California']
frame1 = frame1.reindex(index=['a','b','c','d'], method='ffill')
frame1.columns = sorted(states)