索引必须单调递增或递减

时间:2019-07-09 08:08:19

标签: python pandas

我已经尝试过这些代码。我找不到我想念的东西。

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

2 个答案:

答案 0 :(得分:1)

我认为它不是为非数字索引值实现的,如果原始数据中不存在缺失值,则可能的解决方案:

df = frame.reindex(index=['a','b','c','d'], columns=states).ffill()
print (df)
   Texas  Utah  California
a    1.0   NaN         2.0
b    1.0   NaN         2.0
c    4.0   NaN         5.0
d    7.0   NaN         8.0

答案 1 :(得分:0)

reindexmethod=ffill确实实现了字符串。但是,它要求数据框/系列索引,并且在使用method选项时,列必须单调增加或减少。 frame.columns是非单调的,因此失败。

通过使frame的列按词法顺序来尝试该示例。当method=ffillindex都是单调时,即使它们是字符串,column也能正常工作:

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

Out[876]:
   Texas  Utah  California
a      2     2           0
b      2     2           0
c      5     5           3
d      8     8           6

如果您的indexcolumns是字符串而不是单调的,则需要在{{1}之后调用.ffill.bfill.fillna }

注意:此reindex选项的约束也适用于数字method。只需尝试创建具有数字非单调索引的数据框,用index重新索引将返回相同的错误。


来自文档:

  

方法:{无,“回填” /“填充”,“填充” /“填充”,“最近”}   用于在重新索引的DataFrame中填充孔的方法。请注意:这仅适用于索引单调递增/递减的DataFrames / Series。