【问题标题】:python reindexing with method='ffill'python用method='ffill'重新索引
【发布时间】:2017-11-20 20:20:13
【问题描述】:

我写了以下代码:

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 函数?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

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

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

    输出:

    加利福尼亚 德克萨斯 犹他 一个 2 1 1 b 5 4 4 c 8 7 7 d 8 7 7

    ​希望这可以消除您的疑问。

    【讨论】:

    • 谢谢,您的回答确实消除了我的疑惑。但是它是《python for data analysis》一书中的一个例子,在这本书基于python2环境中,输出中列的顺序是[texas, utah, california],没有排序任何索引,所以为什么它与我们这里的输出和操作?是因为python版本不同还是其他原因?
    • Pandas 正在更新当前版本是0.21 书中指定的版本是什么?也许开发人员意识到排序分配可能是一种简单而正确的数据分配方式,并且可以减少歧义。
    • 这解释了。这本书的版本很旧,我想这就是为什么我总是使用本书的代码来应对错误,比如不建议使用的.ix。再次感谢您的快速回复。
    【解决方案2】:

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

    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)
    

    【讨论】:

    • 感谢您的回答。我知道我可以分两步完成,但这是在本书的熊猫中重新索引的一个示例,用于数据分析的 python,并且我编写了与本书相同的代码,但出现错误。因此,我想知道为什么会发生,并了解这个操作的内部逻辑。
    猜你喜欢
    • 2020-01-23
    • 2018-12-13
    • 2021-06-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-17
    • 1970-01-01
    • 2021-12-11
    • 2021-07-01
    相关资源
    最近更新 更多