【问题标题】:Sort Pandas Dataframe based on previous row value根据前一行值对 Pandas Dataframe 进行排序
【发布时间】:2021-03-21 11:11:52
【问题描述】:

我有一个看起来像这样的数据框:

Name      Previous Name
Alice     NaN
Charlie   Bob
Bob       Alice
Fred      Eddy
Danny     Charlie
Eddy      Dan

我想对数据框进行排序,如下所示:

Name      Previous Name
Alice     NaN
Bob      Alice
Charlie  Bob
Danny    Charlie
Eddy     Danny
Fred     Eddy

我知道布尔测试涉及到类似的东西

dataframe['Value'] = dataframe['PreviousValue'].shift(1)

但是我怎样才能使用它作为排序标准呢?

编辑:将示例从字母更改为名称

【问题讨论】:

    标签: python pandas dataframe sorting


    【解决方案1】:

    排序值,然后移位:

    df = df.sort_values('Value')
    df['Previous Value'] = df['Value'].shift()
    

    输出:

      Value Previous Value
    0     A            NaN
    2     B              A
    1     C              B
    4     D              C
    5     E              D
    3     F              E
    

    【讨论】:

    • 这会覆盖 df['Previous Value'] 中的值吗?
    • 是的。不过,您可以删除第二行。
    • 如果这些值是随机数字而不是字母,这会起作用吗?
    • 只要他们关心的类型相同。如果你有混合类型,例如,将不起作用。 [1, 'a'],或可变值,例如list 在单元格内。
    • 有没有办法做到这一点而不覆盖 df['Previous Value'] 中的值?我有一种使用索引来帮助排序的感觉,比如:for row in df: df[:row].loc = df['Previous Value' == df['Value' i+1]].loc +1
    猜你喜欢
    • 2017-09-14
    • 2016-09-14
    • 2020-10-27
    • 2021-03-21
    • 2016-12-01
    • 2018-07-03
    • 2022-01-21
    • 2012-09-03
    • 2017-05-21
    相关资源
    最近更新 更多