我写了以下代码:
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函数?
答案 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)