排序在两列之间

时间:2019-02-25 14:32:38

标签: python pandas numpy

我有一个数据框:

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行的开始+1。如果找不到,则搜索其他以start为1的开始。

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

1 个答案:

答案 0 :(得分:0)

您可以将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