【问题标题】:Sort on 2 columns which are inter对相互之间的 2 列进行排序
【发布时间】:2019-07-18 23:45:54
【问题描述】:

我有一个数据框:

start  end
1      10
26     50
6      15
1      5
11     25

我期望以下数据框:

start  end
1      10
11     25
26     50
1      5
6      15

这里的排序顺序是注意的,但是第 n 行的结尾必须是第 n+1 行的 start+1。如果没有找到,则搜索 start 为 1 的其他开头。

谁能建议我可以使用哪种排序和分组组合来将上述数据框转换为所需格式?

【问题讨论】:

    标签: python pandas numpy


    【解决方案1】:

    您可以将 df 转换为列表,然后执行以下操作:

    l=[1,10,26,50,6,15,1,5,11,25]
    result=[]
    for x in range(int(len(l)/2)):
        result.append(sorted([l[2*x],l[2*x+1]])[1])
        result.append(sorted([l[2*x],l[2*x+1]])[0])
    

    这会给你result:

    [1, 10, 26, 50, 6, 15, 1, 5, 11, 25]
    

    要将原始 df 转换为列表,您可以这样做:

    startcollist=df['start'].values.tolist()
    
    endcollist=df['end'].values.tolist()
    
    l=[]
    for index, each in enumerate(originaldf):
        l.append(each)
        l.append(endcollist[index])
    

    然后您可以将result 转换回数据框:

    df=pd.DataFrame({'start':result[1::2], 'end':result[0::2]})
    

    给出结果:

        end start
    0   10  1
    1   50  26
    2   15  6
    3   5   1
    4   25  11
    

    表达式result[1::2] 给出result 的每一个奇数元素,result[0::2] 给出每一个偶数元素。解释见这里:https://stackoverflow.com/a/12433705/8565438

    【讨论】:

    • 感谢您的快速回复!但这会确保原始数据框中的开始、结束对保持不变吗?
    • 编辑了答案,现在满意吗?
    • 输出的排序顺序不正确。我也尝试了数组 [26, 50, 1, 10, 6, 15, 1, 5, 11, 25] 的解决方案,但没有不工作
    • 在我的答案的第一个 for 循环中更改了行的顺序,可能想再试一次。
    猜你喜欢
    • 2021-08-05
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 2020-04-24
    • 2020-06-24
    • 2011-01-26
    • 1970-01-01
    相关资源
    最近更新 更多